Giriş etkinliklerine genel bakış

"Oluştur" yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Oluşturma'da dokunma ve giriş özelliklerini nasıl kullanacağınızı öğrenin.

Android'de, bir kullanıcının uygulamanızla etkileşiminden gelen etkinliklere müdahale etmenin birden fazla yolu vardır. Kullanıcı arayüzünüzde etkinlikleri değerlendirirken yaklaşım, olayların gerçek zamanlı olarak kullanıcının etkileşimde bulunduğu Görünüm nesnesi. View sınıfı bu işlemi yapmaya yönelik araçları sağlar.

Düzeninizi oluşturmak için kullanacağınız çeşitli Görünüm sınıfları içinde, birden fazla genel geri çağırma dikkatinizi yöntemlerinden birini devreye sokmaktır. Bu yöntemler, ilgili işlem bu nesnede gerçekleşir. Örneğin, bir Görünüme (Düğme gibi) dokunulduğunda, bu nesnede onTouchEvent() yöntemi çağrılır. Ancak buna müdahale etmek için yöntemi geçersiz kılar. Ancak her View nesnesini genişletmek bu tür bir olayın düzenlenmesi pek olası değildir. View sınıfının bu nedenle daha kolay tanımlayabileceğiniz geri çağırma işlevlerine sahip iç içe yerleştirilmiş arayüz koleksiyonu. Bu arayüzler, etkinlik işleyiciler gibi özellikler, kullanıcı arayüzünüzle kullanıcı etkileşimini yakalamak için kullanabileceğiniz bir araçtır.

Kullanıcı etkileşimini dinlemek için etkinlik işleyicileri yaygın olarak kullanacaksınız ancak bir görünüm sınıfını özel bileşen oluşturmak üzere genişletmek isteyebilirsiniz. Button süresini uzatmak istiyor olabilirsiniz bir şeyler yazacağım. Bu durumda, etkinlik verileriniz için varsayılan etkinlik davranışlarını tanımlayabilir ve sınıf etkinlik işleyicilerini kullanarak oluşturun.

Etkinlik işleyiciler

Etkinlik işleyici, View sınıfında bulunan ve tek bir etkinlik geri çağırma yöntemini kullanın. Bu yöntemler, dinleyicinin sahip olduğu Görünüm'de Android çerçevesi kaydedildiğini, kullanıcı arayüzündeki öğeyle etkileşimi tarafından tetiklenir.

Etkinlik işleyici arayüzlerinde aşağıdaki geri çağırma yöntemleri bulunur:

onClick()
View.OnClickListener tarafından. Bu, kullanıcı öğeye dokunduğunda çağrılır (dokunma modundayken) veya gezinme tuşları ya da iztopu ve uygun "Enter" tuşuna basar. tuşuna basar veya iztopuna basar.
onLongClick()
View.OnLongClickListener tarafından. Bu, kullanıcı öğeye dokunup basılı tuttuğunda (dokunma modunda) veya öğeye dokunduğunda çağrılır veya iztopu içeren öğeye odaklanır ve uygun "Enter" tuşuna basmak ve basılı tutmak için tuşuna basın veya iztopunu basılı tutun (bir saniye süreyle).
onFocusChange()
View.OnFocusChangeListener tarafından. Bu, kullanıcı gezinme tuşlarını veya izleme topunu kullanarak bir öğenin içine geçtiğinde veya öğeden uzaklaştığında çağrılır.
onKey()
View.OnKeyListener tarafından. Bu, kullanıcı öğeye odaklandığında ve cihazdaki bir donanım tuşuna bastığında veya tuşu bıraktığında çağrılır.
onTouch()
View.OnTouchListener tarafından. Bu, kullanıcı dokunma etkinliği olarak nitelenen bir işlem gerçekleştirdiğinde çağrılır. ekrandaki herhangi bir hareket hareketini (öğenin sınırları içinde) tıklayın.
onCreateContextMenu()
View.OnCreateContextMenuListener tarafından. Bu, bir İçerik Menüsü oluşturulurken (sürekli "uzun tıklama" sonucunda) çağrılır. Tartışmayı görüntüle Menüler'deki içerik menülerinde geliştirici kılavuzuna.

Bu yöntemler, ilgili arayüzleri yalnızca bu yöntemlerde kullanabilir. Bu yöntemlerden birini ve etkinliklerinizi işlemesine, iç içe yerleştirilmiş arayüzü Etkinliğinize uygulayabilir veya anonim bir sınıf olarak tanımlayabilirsiniz. Ardından uygulamanızın bir örneğini iletin ilgili View.set...Listener() yöntemine. (ör. setOnClickListener(). ve OnClickListener uygulamanızı iletin.)

Aşağıdaki örnekte bir düğme için tıklama işleyicinin nasıl kaydedileceği gösterilmektedir.

Kotlin

protected void onCreate(savedValues: Bundle) {
    ...
    val button: Button = findViewById(R.id.corky)
    // Register the onClick listener with the implementation above
    button.setOnClickListener { view ->
        // do something when the button is clicked
    }
    ...
}

Java

// Create an anonymous implementation of OnClickListener
private OnClickListener corkyListener = new OnClickListener() {
    public void onClick(View v) {
      // do something when the button is clicked
    }
};

protected void onCreate(Bundle savedValues) {
    ...
    // Capture our button from layout
    Button button = (Button)findViewById(R.id.corky);
    // Register the onClick listener with the implementation above
    button.setOnClickListener(corkyListener);
    ...
}

Ayrıca, Etkinliğinizin bir parçası olarak OnClickListener'ı uygulamak daha kullanışlı olabilir. Böylece fazladan sınıf yükü ve nesne tahsisi önlenir. Örnek:

Kotlin

class ExampleActivity : Activity(), OnClickListener {
  
    protected fun onCreate(savedValues: Bundle) {
        val button: Button = findViewById(R.id.corky)
        button.setOnClickListener(this)
    }

    // Implement the OnClickListener callback
    fun onClick(v: View) {
        // do something when the button is clicked
    }
}

Java

public class ExampleActivity extends Activity implements OnClickListener {
    protected void onCreate(Bundle savedValues) {
        ...
        Button button = (Button)findViewById(R.id.corky);
        button.setOnClickListener(this);
    }

    // Implement the OnClickListener callback
    public void onClick(View v) {
      // do something when the button is clicked
    }
    ...
}

Yukarıdaki örnekte onClick() geri çağırmasının döndürme değeri yok ancak diğer bazı etkinlik işleyici yöntemlerinin boole döndürmesi gerekir. Neden olaya göre değişir. Bunu başaran birkaç sorunun nedeni şu şekildedir:

  • onLongClick() - Bu komut, etkinliği kullanıp kullanmadığınızı ve etkinliğin daha fazla taşınmaması gerektiğini belirtmek için bir boole döndürür. Yani etkinliği işlediğinizi ve etkinliğin burada durması gerektiğini belirtmek için true değerini döndürün; etkinliği işlemediyseniz false döndürür ve/veya etkinliğin başka bir tıklama işleyicileridir.
  • onKey() - Bu komut, etkinliği kullanıp kullanmadığınızı ve etkinliğin daha fazla taşınmaması gerektiğini belirtmek için bir boole döndürür. Yani etkinliği işlediğinizi ve etkinliğin burada durması gerektiğini belirtmek için true değerini döndürün; etkinliği işlemediyseniz false döndürür ve/veya etkinliğin başka bir doğrudan dinleyicilere ulaşabilirsiniz.
  • onTouch() - Bu komut, dinleyicinizin bu etkinliği kullanıp kullanmadığını belirtmek için bir boole döndürür. Önemli olan bu etkinlikte birbirini takip eden birden fazla işlem olabilir. Bu nedenle, etkinliği almadığınızı, etkinliği henüz tamamlamadığınızı ve etkinliğin bu etkinlikten sonra yapılacak işlemlerle ilgilenmiyorum. Bu nedenle, başka bir işlem için çağrılmaz (ör. parmak hareketi veya nihai yukarı işlem etkinliği)

Donanım önemli etkinliklerinin her zaman o anda odakta olan görünüme dağıtıldığını unutmayın. Bunlar en üstten başlayarak dağıtılır önce görünüm hiyerarşisini, ardından uygun hedefe ulaşıncaya kadar aşağıya iner. Görünümünüz (veya Görünümünüzün bir alt öğesi) varsa, etkinliğin dispatchKeyEvent() yöntemiyle seyahat ettiğini görebilirsiniz. Önemli etkinlikleri Görünümünüzden kaydetmeye alternatif olarak onKeyDown() ile Etkinliğinizdeki tüm etkinlikler ve onKeyUp().

Ayrıca, uygulamanız için metin girişi düşünürken birçok cihazda yalnızca yazılım girişi olduğunu unutmayın. yöntemlerine göz atın. Bu tür yöntemlerin anahtar tabanlı olması gerekmez; bazıları ses girişi, el yazısı vb. kullanabilir. Hatta giriş yöntemi klavye benzeri bir arayüz sunduğunda, genelde onKeyDown() etkinlik ailesi. Hiçbir zaman Uygulamanızı cihazlarla sınırlamak istemiyorsanız belirli tuşlara basmanın kontrol edilmesini gerektiren bir kullanıcı arayüzü derler donanım klavyesi kullanarak. Özellikle, kullanıcı şuraya bastığında girişi doğrulamak için bu yöntemlere güvenmeyin: dönüş anahtarı; Bunun yerine, IME_ACTION_DONE gibi işlemleri kullanarak giriş yöntemini kullanarak, uygulamanızın nasıl tepki vermeyi beklediğini belirler. Bu nedenle, kullanıcı arayüzünü anlamlı bir şekilde değiştirebilir. Varsayımlardan kaçının daha önce biçimlendirilmiş metinlerin uygulamanıza sağlanması konusunda bu yönteme güvenin.

Not: Android önce etkinlik işleyicileri, daha sonra uygun varsayılanı arar işleyicilerini ekleyin. Dolayısıyla, bu etkinlik işleyicilerden true değeri döndürülmesi durdurulur etkinliğin diğer etkinlik işleyicilere yayılmasını sağlar ve ayrıca etkinlik işleyiciyi etkinleştiriyorum. Bu nedenle, true değerini döndürdüğünüzde etkinliği sonlandırmak istediğinizden emin olun.

Etkinlik işleyiciler

Görünüm'den özel bir bileşen oluşturuyorsanız çeşitli geri çağırma yöntemleri tanımlayabilirsiniz. varsayılan etkinlik işleyici olarak kullanılır. Özel Bileşenleri Görüntüle'ye göz atarak olay işleme için kullanılan bazı yaygın geri çağırma işlevlerinden şunları içerir:

Görünüm sınıfının parçası olmayan, bilmeniz gereken başka yöntemler de mevcuttur. ancak etkinlikleri yönetme şeklinizi de doğrudan etkileyebilir. Daha karmaşık etkinlikleri yönetirken kullanıyorsanız şu diğer yöntemleri göz önünde bulundurun:

Dokunma modu

Bir kullanıcı, yön tuşları veya iztopu ile kullanıcı arayüzünde gezindiğinde kullanıcıların görebileceği şekilde işlem yapmak için gerekli öğelere (düğmeler gibi) giriş kabul eder. Bununla birlikte, cihazın dokunma özellikleri varsa ve kullanıcı kullanıcı arayüzüne dokunarak arayüzle etkileşime girmeye başladığında, öğeleri vurgulayın veya belirli bir Görünüme odaklanın. Dolayısıyla, "dokunma modu" adlı etkileşim için.

Dokunma özellikli cihazlarda, kullanıcı ekrana dokunduğunda cihaz dokunma moduna girer. Bundan sonra yalnızca hangi görüntülemeler için isFocusableInTouchMode() doğru değerine ayarlandığında metin düzenleme widget'ları gibi öğelere odaklanılabilir. Düğmeler gibi dokunulabilir olan diğer Görünümler dokunulduğunda odaklanmaz; onlar tıklama işleyicilerini tetiklemeleri yeterlidir.

Bir kullanıcı yön tuşuna bastığında veya iztopuyla kaydırdığında cihaz dokunma modundan çıkın ve odaklanmak için bir görünüm bulun. Artık kullanıcı etkileşimde bulunmaya devam edebilir kullanıcı arayüzüyle uyumlu olduğunu unutmayın.

Dokunma modu durumu, tüm sistemde (tüm pencereler ve etkinlikler) korunur. Mevcut durumu sorgulamak için şunu çağırabilirsiniz: Cihazın şu anda dokunma modunda olup olmadığını görmek için isInTouchMode() tuşlarına basın.

Odaklanma

Çerçeve, kullanıcı girişine yanıt olarak rutin odak hareketlerini yönetir. Buna, Görünümler kaldırılırken veya gizlenirken odağın değiştirilmesi de dahildir. Görüntülemeler kullanılabilir hale gelir. Görüntülemeler, odaklanma konusunda istekli olduklarını gösterir isFocusable() yöntemiyle işlem yapabilirsiniz. Bir Görünümün şu anda izin verilen odaklan, setFocusable() numaralı telefonu ara. Dokunma modundayken bir Görünümün isFocusableInTouchMode() ile odaklanmaya izin verip vermediğini sorgulayabilirsiniz. setFocusableInTouchMode() ile bu ayarı değiştirebilirsiniz.

Android 9 (API düzeyi 28) veya sonraki sürümleri çalıştıran cihazlarda etkinliklere odaklanmanız gerekir. Bunun yerine, isterseniz açıkça ilk odaklama isteğinde bulunmanız gerekir.

Odaklanma hareketi, her bir konumdaki en yakın komşuyu bulan bir algoritmaya yardımcı olur. Nadir durumlarda, varsayılan algoritma Geliştiricinin hedeflenen davranışı. Bu tür durumlarda düzen dosyasında aşağıdaki XML özelliklerine sahip açık geçersiz kılma işlemleri: nextFocusDown, nextFocusLeft, nextFocusRight ve nextFocusUp. Bu özelliklerden birini aşağıdaki Görünüm'e ekleyin: ayrıldığını gösterir. Özelliğin değerini View'ın kimliği olacak şekilde tanımlayın belirlemeniz gerekir. Örnek:

<LinearLayout
    android:orientation="vertical"
    ... >
  <Button android:id="@+id/top"
          android:nextFocusUp="@+id/bottom"
          ... />
  <Button android:id="@+id/bottom"
          android:nextFocusDown="@+id/top"
          ... />
</LinearLayout>

Normalde bu dikey düzende, ilk Düğmeden yukarıya doğru gitmek veya ikinci Düğmeden aşağı doğru gidilmez. Artık üst Düğme için en alttaki nextFocusUp olarak tanımlanırsa (bunun tersi de geçerlidir) gezinme odağı yukarıdan aşağıya ve aşağıdan yukarıya doğru inceleyebilirsiniz.

Bir Görünümü kullanıcı arayüzünüzde odaklanılabilir olarak tanımlamak istiyorsanız (geleneksel olarak olmadığında), android:focusable XML özelliğini, düzen bildiriminizde Görünüme ekleyin. true değerini ayarlayın. Ayrıca bir Görünüm de bildirebilirsiniz android:focusableInTouchMode ile Dokunma Modu'ndayken odaklanılabilir.

Belirli bir görünümün odaklanmasını istemek için requestFocus() numaralı telefonu arayın.

Odaklanılan etkinlikleri dinlemek (bir Görünüm odağa alındığında veya odağı kaybettiğinde bildirim almak için) onFocusChange(), (Etkinlik işleyiciler bölümünde açıklandığı gibi).