Android - Olay İşleme

Events are a useful way to collect data about a user's interaction with interactive components of Applications.Düğmeye basma veya ekrana dokunma vb. Gibi Android çerçevesi, ilk giren ilk çıkar (FIFO) temelinde bir olay kuyruğu tutar. Bu olayları programınızda yakalayabilir ve gereksinimlere göre uygun işlemi yapabilirsiniz.

Android Etkinlik Yönetimi ile ilgili aşağıdaki üç kavram vardır:

  • Event Listeners- Olay dinleyicisi, View sınıfında tek bir geri çağrı yöntemi içeren bir arabirimdir. Bu yöntemler, dinleyicinin kayıtlı olduğu Görünüm kullanıcı arayüzündeki öğeyle kullanıcı etkileşimi tarafından tetiklendiğinde Android çerçevesi tarafından çağrılacaktır.

  • Event Listeners Registration - Etkinlik Kaydı, Etkinlik İşleyicinin bir Etkinlik İşleyiciye kaydedilmesi ve böylece Etkinlik İşleyici olayı tetiklediğinde işleyicinin çağrılması işlemidir.

  • Event Handlers - Bir olay gerçekleştiğinde ve olay için bir olay dinleyicisi kaydettiğimizde, olay dinleyicisi, olayı işleyen yöntem olan Olay İşleyicilerini çağırır.

Etkinlik Dinleyicileri ve Etkinlik İşleyicileri

Olay işleyicisi Etkinlik Dinleyici ve Açıklama
tıklamada()

OnClickListener()

Bu, kullanıcı tıkladığında veya dokunduğunda veya düğme, metin, resim vb. Gibi herhangi bir parçacığa odaklandığında çağrılır. Bu tür olayları işlemek için onClick () olay işleyicisini kullanacaksınız.

onLongClick ()

OnLongClickListener()

Bu, kullanıcı bir veya daha fazla saniye boyunca düğme, metin, resim vb. Gibi herhangi bir widget'a tıkladığında veya dokunduğunda veya odaklandığında çağrılır. Böyle bir olayı işlemek için onLongClick () olay işleyicisini kullanacaksınız.

onFocusChange ()

OnFocusChangeListener()

Bu, widget odağını kaybettiğinde çağrılır. kullanıcı görüntüleme öğesinden uzaklaşır. Böyle bir olayı işlemek için onFocusChange () olay işleyicisini kullanacaksınız.

onKey ()

OnFocusChangeListener()

Bu, kullanıcı öğeye odaklandığında ve cihazdaki bir donanım tuşuna bastığında veya bıraktığında çağrılır. Böyle bir olayı işlemek için onKey () olay işleyicisini kullanacaksınız.

iletişimde()

OnTouchListener()

Bu, kullanıcı tuşa bastığında, tuşu bıraktığında veya ekrandaki herhangi bir hareket hareketiyle çağrılır. Böyle bir olayı işlemek için onTouch () olay işleyicisini kullanacaksınız.

onMenuItemClick ()

OnMenuItemClickListener()

Bu, kullanıcı bir menü öğesi seçtiğinde çağrılır. Böyle bir olayı işlemek için onMenuItemClick () olay işleyicisini kullanacaksınız.

onCreateContextMenu ()

onCreateContextMenuItemListener()

Bu, bağlam menüsü oluşturulurken çağrılır (uzun süreli "uzun tıklamanın sonucu olarak)

Bir parçası olarak kullanılabilen çok daha fazla olay dinleyicisi var ViewUygulamanız için gerekli olabilecek OnHoverListener, OnDragListener vb. sınıflar. Bu nedenle, sofistike bir uygulama geliştirecekseniz diye Android uygulama geliştirme için resmi belgelere bakmanızı tavsiye ederim.

Etkinlik Dinleyicileri Kaydı

Olay Kaydı, bir Olay İşleyicinin bir Olay İşleyiciye kaydedildiği ve böylece Olay İşleyici olayı tetiklediğinde işleyicinin çağrıldığı işlemdir. Olay dinleyicinizi herhangi bir olay için kaydetmenin birkaç zor yolu olsa da, duruma göre bunlardan herhangi birini kullanabileceğiniz en iyi 3 yolu listeleyeceğim.

  • Anonim Bir İç Sınıf Kullanımı

  • Activity sınıfı, Dinleyici arayüzünü uygular.

  • Olay işleyicisini doğrudan belirtmek için Düzen dosyası activity_main.xml'yi kullanma.

Aşağıdaki bölüm size üç senaryonun tümüyle ilgili ayrıntılı örnekler sağlayacaktır -

Dokunma Modu

Kullanıcılar, donanım tuşlarını veya düğmelerini kullanarak veya ekrana dokunarak cihazlarıyla etkileşim kurabilir. Ekrana dokunmak, cihazı dokunmatik moda geçirir. Kullanıcı daha sonra ekrandaki sanal düğmelere, görüntülere vb. Dokunarak onunla etkileşime girebilir. View sınıfının isInTouchMode () yöntemini çağırarak aygıtın dokunma modunda olup olmadığını kontrol edebilirsiniz.

Odaklanma

Bir görünüm veya widget genellikle vurgulanır veya odakta olduğunda yanıp sönen bir imleç görüntüler. Bu, kullanıcıdan girdi almaya hazır olduğunu gösterir.

  • isFocusable() - doğru veya yanlış döndürür

  • isFocusableInTouchMode()- Dokunma modunda görünüme odaklanılıp odaklanılamayacağını kontrol eder. (Bir donanım anahtarı kullanılırken bir görünüme odaklanılabilir ancak cihaz dokunmatik moddayken odaklanılamaz)

android:foucsUp="@=id/button_l"

onTouchEvent ()

public boolean onTouchEvent(motionEvent event){
   switch(event.getAction()){
      case TOUCH_DOWN:
      Toast.makeText(this,"you have clicked down Touch button",Toast.LENTH_LONG).show();
      break();
   
      case TOUCH_UP:
      Toast.makeText(this,"you have clicked up touch button",Toast.LENTH_LONG).show();
      break;
   
      case TOUCH_MOVE:
      Toast.makeText(this,"you have clicked move touch button"Toast.LENTH_LONG).show();
      break;
   }
   return super.onTouchEvent(event) ;
}

Olay İşleme Örnekleri

Anonim Bir İç Sınıf Kullanarak Etkinlik Dinleyicileri Kaydı

Burada, dinleyicinin anonim bir uygulamasını oluşturacaksınız ve her sınıf yalnızca tek bir denetime uygulanıyorsa ve olay işleyicisine bağımsız değişkenler iletme avantajınız varsa faydalı olacaktır. Bu yaklaşımda, olay işleyici yöntemleri, Aktivitenin özel verilerine erişebilir. Aktiviteyi aramak için referans gerekmez.

Ancak işleyiciyi birden fazla denetime uyguladıysanız, işleyici için kodu kesip yapıştırmanız gerekir ve işleyicinin kodu uzunsa, kodun bakımını zorlaştırır.

Aşağıda, click olayını kaydetmek ve yakalamak için ayrı Listener sınıfını nasıl kullanacağımızı gösteren basit adımlar verilmiştir. Benzer şekilde, dinleyicinizi diğer gerekli olay türleri için uygulayabilirsiniz.

Adım Açıklama
1 Bir Android uygulaması oluşturmak için Android studio IDE'yi kullanacak ve bunu Hello World Example bölümünde açıklandığı gibi com.example.myapplication paketi altında benimuygulamam olarak adlandıracaksınız .
2 Tanımlanan iki düğme için tıklama olayı dinleyicileri ve işleyicileri eklemek için src / MainActivity.java dosyasını değiştirin .
3 Res / layout / activity_main.xml dosyasının detault içeriğini Android kullanıcı arayüzü kontrollerini içerecek şekilde değiştirin.
4 Varsayılan dize sabitlerini bildirmeye gerek yoktur. Android Studio varsayılan sabitleri dikkate alır.
5 Android öykünücüsünü başlatmak ve uygulamada yapılan değişikliklerin sonucunu doğrulamak için uygulamayı çalıştırın.

Aşağıda, değiştirilen ana aktivite dosyasının içeriği yer almaktadır src/com.example.myapplication/MainActivity.java. Bu dosya, temel yaşam döngüsü yöntemlerinin her birini içerebilir.

package com.example.myapplication;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {
   private ProgressDialog progress;
   Button b1,b2;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      progress = new ProgressDialog(this);

      b1=(Button)findViewById(R.id.button);
      b2=(Button)findViewById(R.id.button2);
      b1.setOnClickListener(new View.OnClickListener() {
         
         @Override
         public void onClick(View v) {
            TextView txtView = (TextView) findViewById(R.id.textView);
            txtView.setTextSize(25);
         }
      });

      b2.setOnClickListener(new View.OnClickListener() {
         
         @Override
         public void onClick(View v) {
            TextView txtView = (TextView) findViewById(R.id.textView);
            txtView.setTextSize(55);
         }
      });
   }
}

Aşağıdakilerin içeriği olacak res/layout/activity_main.xml dosya -

Burada abc, tutorialspoint logosu hakkında bilgi verir
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Event Handling "
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp"/>
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_above="@+id/imageButton"
      android:layout_centerHorizontal="true"
      android:layout_marginBottom="40dp" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_centerVertical="true"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Small font"
      android:id="@+id/button"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Large Font"
      android:id="@+id/button2"
      android:layout_below="@+id/button"
      android:layout_alignRight="@+id/button"
      android:layout_alignEnd="@+id/button" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello World!"
      android:id="@+id/textView"
      android:layout_below="@+id/button2"
      android:layout_centerHorizontal="true"
      android:textSize="25dp" />
      
</RelativeLayout>

Aşağıdakilerin içeriği olacak res/values/strings.xml iki yeni sabit tanımlamak için -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">myapplication</string>
</resources>

Aşağıdaki varsayılan içeriktir AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myapplication" >
      
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.myapplication.MainActivity"
         android:label="@string/app_name" >
      
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      
      </activity>
      
   </application>
</manifest>

Hadi çalıştırmayı deneyelim myapplicationuygulama. Senin yarattığını varsayıyorumAVDortam kurulumu yapılırken. Uygulamayı Android Studio'dan çalıştırmak için, projenizin etkinlik dosyalarından birini açın

ve araç çubuğundan Çalıştır simgesini tıklayın . Android Studio, uygulamayı AVD'nize yükler ve başlatır ve kurulumunuz ve uygulamanızla ilgili her şey yolundaysa, aşağıdaki Emulator penceresini görüntüler -

Şimdi teker teker iki düğmeyi tıklamayı deneyin ve o yazı tipini göreceksiniz. Hello World metin değişecektir, çünkü kayıtlı tıklama olayı işleyici yöntemi her tıklama olayına karşı çağrılmaktadır.

Egzersiz yapmak

Farklı olay türleri için farklı olay işleyicileri yazmayı denemenizi ve farklı olay türleri ve bunların işlenmesindeki tam farkı anlamanızı tavsiye ederim. Menü, döndürücü, toplayıcı widget'ları ile ilgili etkinlikler biraz farklıdır, ancak bunlar aynı zamanda yukarıda açıklanan kavramlara dayanmaktadır.