Dokunmatik ekran rahatsız edici olduğunda bilek hareketleri sayesinde uygulamanızla tek elle hızlı şekilde etkileşimde bulunabilirsiniz.
Örneğin, kullanıcı bir eliyle bir bardak su tutarken bildirimler arasında gezinebilir. Bilek hareketlerinin diğer kullanım alanları şunlardır:
- Tempolu koşu uygulamasında atılan adım sayısını, geçen süreyi ve mevcut tempoyu gösteren dikey ekranlarda gezinme
- Bir seyahat uygulamasında uçuş ve kapı bilgileri arasında gezinerek
- Bir haber uygulamasında, makaleler arasında gezinirken
Bir kol saati cihazında bilek hareketlerini incelemek için Ayarlar > Gelişmiş özellikler > Hareketler > Bilek Hareketleri Açık'ı seçerek hareketlerin açık olduğunu onaylayın. Ardından, Eğitimi Başlat'ı seçerek kol saatinde Hareketler eğitimini tamamlayın.
Not: Bileği sallama, sistem genelinde geri veya geri alma hareketidir ve uygulamalar tarafından özelleştirilemez.
Bilek hareketleri, bu kılavuzda açıklandığı gibi aşağıdaki şekillerde kullanılabilir:
- Önceden tanımlanmış hareket işlemlerine sahip kavisli düzene sahip
- Yeni kullanıcı işlemlerini tanımlamak için önemli etkinlikleri doğrudan kullanarak
Her bilek hareketi, aşağıdaki tabloda gösterildiği gibi KeyEvent
sınıfındaki bir int
sabitine eşlenir:
Hareket | Önemli etkinlik | Açıklama |
---|---|---|
Bileğinizi dışarı doğru çevirin |
KEYCODE_NAVIGATE_NEXT
|
Bu anahtar kodu bir sonraki öğeye gider. |
Bileğinizi içeri doğru çevirin |
KEYCODE_NAVIGATE_PREVIOUS
|
Bu anahtar kodu önceki öğeye gider. |
Bilek hareketlerini desteklemek için kavisli bir düzen kullanın
WearableRecyclerView
sınıfı, listeler için eğri bir düzen sağlar ve bilek hareketlerini otomatik olarak destekler. Sınıfta, görünümde oda olduğunda bilek hareketlerinin gerçekleştirilmesi için önceden tanımlanmış işlemler vardır. WearableRecyclerView
sınıfını kullanma hakkında bilgi edinmek için Wear OS'te liste oluşturma başlıklı makaleye göz atın. Ayrıca bu kılavuzun En iyi uygulamalar bölümünü inceleyin.
Not: WearableRecyclerView
sınıfı, Wearable Destek Kitaplığı'ndaki benzer,
kullanımdan kaldırılmış sınıfın yerini alır.
WearableRecyclerView
kullansanız bile KeyEvent
sınıfındaki sabit değerleri kullanmak isteyebilirsiniz. Önceden tanımlanmış işlemler, WearableRecyclerView
alt sınıfı alt sınıflandırılarak ve onKeyDown()
geri çağırması yeniden uygulanarak geçersiz kılınabilir. Bu davranış, setEnableGestureNavigation(false)
kullanılarak tamamen devre dışı bırakılabilir.
Daha fazla bilgi için
Klavye işlemlerini işleme bölümüne bakın.
Önemli etkinlikleri doğrudan kullanma
Hareket etkinliklerine yanıt olarak yeni işlemleri tetiklemek için
WearableRecyclerView
dışındaki önemli etkinlikleri kullanabilirsiniz. Daha da önemlisi, bu hareket etkinlikleri cihaz etkin moddayken
tanınır ve tüm önemli etkinliklerle aynı şekilde sunulur.
View
veya Activity
gibi kullanıcı etkileşimiyle ilgili olan ve
KeyEvent.Callback
uygulayan bir sınıf, bilek hareketleriyle ilgili önemli etkinlikleri, diğer önemli etkinliklerde listelenebileceği gibi dinleyebilir. Android çerçevesi, önemli etkinliklere odaklanan View
veya Activity
öğelerini çağırır. Hareketler söz konusu olduğunda, hareketler gerçekleştiğinde onKeyDown()
yöntemi geri çağırmaya çağrılır.
Örneğin, bir uygulama KeyEvent.Callback
özelliğini uygulayan bir View
veya Activity
içinde önceden tanımlanmış işlemleri aşağıdaki şekilde geçersiz kılabilir:
Kotlin
class GesturesActivity : Activity() { /* KeyEvent.Callback */ override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_NAVIGATE_NEXT -> // Do something that advances a user View to the next item in an ordered list. moveToNextItem() KeyEvent.KEYCODE_NAVIGATE_PREVIOUS -> // Do something that advances a user View to the previous item in an ordered list. moveToPreviousItem() else -> { // If you did not handle it, let it be handled by the next possible element as determined // by the Activity. super.onKeyDown(keyCode, event) } } } /** Shows the next item in the custom list. */ private fun moveToNextItem(): Boolean { ... // Return true if handled successfully, otherwise return false. return false } /** Shows the previous item in the custom list. */ private fun moveToPreviousItem(): Boolean { ... // Return true if handled successfully, otherwise return false. return false } }
Java
public final class GesturesActivity extends Activity { @Override /* KeyEvent.Callback */ public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_NAVIGATE_NEXT: // Do something that advances a user View to the next item in an ordered list. return moveToNextItem(); case KeyEvent.KEYCODE_NAVIGATE_PREVIOUS: // Do something that advances a user View to the previous item in an ordered list. return moveToPreviousItem(); } // If you did not handle it, let it be handled by the next possible element as determined by the Activity. return super.onKeyDown(keyCode, event); } /** Shows the next item in the custom list. */ private boolean moveToNextItem() { boolean handled = false; ... // Return true if handled successfully, otherwise return false. return handled; } /** Shows the previous item in the custom list. */ private boolean moveToPreviousItem() { boolean handled = false; ... // Return true if handled successfully, otherwise return false. return handled; } }
En iyi uygulamalar
- Önemli etkinliklerin
View
veActivity
cihazlarınıza gönderilmesi hakkında bilgi edinmek içinKeyEvent
veKeyEvent.Callback
sayfalarını inceleyin. - Yönleri tutarlı bir şekilde koruyun: Sonraki video için "bileğinizi dışarı doğru çevirin", önceki video için de "bileği içeriye çevirin" ifadelerini kullanın.
- Bir hareket için paralel dokunun.
- Görsel geri bildirim sağlayın.
- Sistemin geri kalanına aykırı olabilecek işlevler uygulamak için anahtar kodu kullanmayın. Örneğin, bir işlemi iptal etmek veya kısa hareketlerle sol-sağ eksende gezinmek için
KEYCODE_NAVIGATE_NEXT
işlevini kullanmayın. - Ekran dışındaki veya kısmen kapsanan görünümler gibi kullanıcı arayüzünün parçası olmayan öğelerdeki önemli etkinliklere müdahale etmeyin. Bu, tüm önemli etkinliklerle aynıdır.
- Tekrarlanan kaydırma hareketlerini kendi özgün hareketinizle yeniden yorumlamayın. Bu ayar, sistemin "bileği sallama" hareketiyle çakışabilir.
Bir görünümün hareket önemli etkinliklerini alabilmesi için odak olması gerekir (bkz.
View.setFocusable()
).Hareketler önemli etkinlikler olarak değerlendirildiğinden, beklenmedik şeyler yapabilecek "dokunma modundan" bir geçişi tetikler. Kullanıcılar dokunma ve hareketleri kullanma arasında geçiş yapabildiğinden
View::setFocusableInTouchmode()
yöntemi gerekli olabilir. Bazı durumlarda, dokunma moduna geçtikten veya bu moddan çıktıktan sonra odak değiştiğinde, amaçladığınız görünüme odaklanılması içinsetDescendantFocusability(FOCUS_BEFORE_DESCENDANTS)
kullanılması da gerekebilir.requestFocus()
veclearFocus()
politikalarını kullanırken dikkatli olun:requestFocus()
çağrısı yapılırken görünüm için odaklamanın uygun olduğundan emin olun. Görüntü ekranın dışındaysa veya başka bir görünümle örtüşüyorsa geri çağırma hareketlerini tetiklediğinde sürprizlerle karşılaşabilirsiniz.clearFocus()
yöntemi, başka bir uygun görünüm bulmak için odak araması başlatır. Görünüm hiyerarşisine bağlı olarak, bu arama için önemsiz olmayan hesaplamalar gerekebilir. Bu işlem, odaklanmayı beklemediğiniz bir görünüme de odaklanılmasına yol açabilir.
Önemli etkinlikler, görünüm hiyerarşisine odaklanarak ilk olarak görünüme iletilir. Odaklanmış görünüm etkinliği gerçekleştirmiyorsa (diğer bir deyişle,
false
değerini döndürürse) etkinlik, odağı alabiliyor ve birKeyListener
öğesine sahip olsa bile üst görünüme yayınlanmaz. Bunun yerine, etkinlik, odağın korunduğu görünüm hiyerarşisini tutan mevcut etkinliğe iletilir.Dolayısıyla, tüm etkinlikleri daha üst düzeyde yakalamak ve ardından ilgili kodları aktarmak gerekebilir. Alternatif olarak, etkinliği alt sınıflandırabilir ve gerektiğinde anahtarlara müdahale etmek veya alt katmanlarda kullanılmadıklarında bunları işlemek için
dispatchKeyEvent(KeyEvent event)
yöntemini geçersiz kılabilirsiniz.