Çevirmeli giriş

Bazı Wear OS cihazlarda fiziksel bir dönen yan düğme vardır. Kullanıcı düğmeyi çevirdiğinde, uygulamanızın mevcut görünümü yukarı veya aşağı kaydırılır. Bu giriş türüne dönen giriş denir.

Not: Bu kılavuz öncelikli olarak, Görünüm tabanlı kullanıcı arayüzleri kullanarak çevirmeli girişlerin işlenmesiyle ilgilidir. Wear OS için Compose'u kullanarak çevirmeli girişleri işleme hakkında daha fazla bilgi için Compose'da döner giriş başlıklı makaleyi inceleyin.

ScrollView, ListView, HorizontalScrollView ve WearableRecyclerView gibi birçok kaydırılabilir kapsayıcı, Wear OS'e özel kod gerektirmeden odaklanılan çevirmeli girişleri destekler. Android 9 (API düzeyi 28) ve sonraki sürümlerde görüntülemeler dolaylı olarak odaklanılmadığından odak noktasına sahip olmak önemli bir ön koşuldur.

En iyi uygulamalara odaklanın

Çevirmeli giriş etkinliklerine yanıt vermek için kaydırılabilir bir kapsayıcıya odaklanılmalıdır. Döner giriş etkinlikleri, görünüm hiyerarşisinde baloncuk oluşturmaz. Odaklı görünüm yoksa veya odaklanmış görünüm View.onGenericMotionEvent() kaynağından false değerini döndürürse etkinlik Activity.onGenericMotionEvent() öğesine gönderilir.

Aşağıda, çevirmeli giriş etkinliklerine yanıt vermeyle ilgili en iyi uygulamalar verilmiştir:

  • Varsayılan olarak, bir etkinlik başlatmanın veya bir görünüme dokunmanın, odaklanılabilir olsa bile o etkinliğe odaklanmadığını unutmayın. Görünüm odağınızı vermek için görünümün <requestFocus /> etiketini kullanması veya View.requestFocus() etiketini manuel olarak çağırması gerekir.
  • Hem android:focusable="true" hem de android:focusableInTouchMode="true" özelliğini kullanarak özel kaydırılabilir görünümleri odaklanabilir olarak işaretleyin.
  • Kaydırılabilir görünümünüz Activity.onCreate() tarihinden sonra eklenmişse (örneğin, kullanıcı arayüzünüzü oluşturmadan önce ağ isteğinin bitmesini bekliyorsanız) ekledikten sonra requestFocus() numarasını arayın.
  • Kaydırılabilir görünümünüz başlangıçta INVISIBLE veya GONE ise VISIBLE olarak ayarlarken requestFocus() çağrısı yapın.
  • Etkinliğinizde birden fazla kaydırılabilir görünüm varsa <requestFocus /> etiketini kullanarak odaklanmak için bir görünüm seçin. İç içe yerleştirilmiş kaydırma, yandaki dönen düğmeyle desteklenmez.
  • Kullanıcı arayüzünüz, kullanıcı etkileşimde bulunduğunda odak alan başka bir görünüm içeriyorsa (ör. InputText), odağı kaybetmesi halinde kullanıcının odağı kaydırılabilir görünüme geri döndürmesi için bir yol sağlayın. Bunun için kaydırılabilir görünüme yapılan dokunuşları dinleyip yanıt olarak requestFocus() çağırın.

Özel rotasyon davranışı

Kaydırılabilir görünümünüz, çevirmeli giriş kaydırmasını yerel olarak desteklemiyorsa veya çevirmeli girişinizi kaydırma dışında bir şey için kullanmak istiyorsanız (örneğin, yakınlaştırma/uzaklaştırma veya kadranı çevirme gibi işlemler) kaydırma etkinliklerini kendiniz gerçekleştirebilirsiniz. Görüşe odaklandığınızdan emin olun. Aksi takdirde etkinlikler gerçekleşmez.

Aşağıdaki kod snippet'inde, görünümünüze özel kaydırma eklemek için MotionEvent, InputDeviceCompat ve ViewConfigurationCompat öğelerinin nasıl kullanılacağı gösterilmektedir:

Kotlin

myView.setOnGenericMotionListener { v, ev ->
  if (ev.action == MotionEvent.ACTION_SCROLL &&
      ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)
  ) {
    // Don't forget the negation here
    val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) *
        ViewConfigurationCompat.getScaledVerticalScrollFactor(
             ViewConfiguration.get(context), context
        )
    // Swap these axes to scroll horizontally instead
    v.scrollBy(0, delta.roundToInt())
    true
  } else {
    false
  }
}

Java

myView.setOnGenericMotionListener(new View.OnGenericMotionListener() {
  @Override
  public boolean onGenericMotion(View v, MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_SCROLL &&
        ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)
    ) {
      // Don't forget the negation here
      float delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) *
          ViewConfigurationCompat.getScaledVerticalScrollFactor(
               ViewConfiguration.get(context), context
          );

      // Swap these axes to scroll horizontally instead
      v.scrollBy(0, Math.round(delta));

      return true;
    }
    return false;
  }
});

Emülatör kullanarak test etme

Wear cihazda çevirmeli giriş kaydırma simülasyonu yapmak için Android Emülatörü kullanın. Projenizi çalıştırmak için emülatörde Wear uygulamanızı başlatın veya yüklemek için bir APK dosyasını emülatöre sürükleyin.

Emülatörde çevirmeli girişi test etmek için:

  1. SDK yöneticisinden Android Emulator 26.0.3 veya sonraki bir sürümü edinmek için SDK araçları sekmesini kullanın.
  2. Android Studio'da Araçlar > Android > AVD Manager'ı seçin. API 25 veya sonraki bir sürüme sahip yeni bir Wear cihaz oluşturun.
  3. Android Studio'dan emülatörü çalıştırın.
  4. Emülatör araç çubuğunun altındaki üç nokta taşma menüsünü tıklayın. Çevirmeli giriş arayüzünü açmak için yeni pencerede Döner giriş sekmesini tıklayın ve çevirmeli giriş kaydırmayı deneyin.

Aşağıdaki videoda emülatörde çevirmeli giriş gösterilmektedir: