Büyük ekranlı cihazlarda, kullanıcılar uygulamalarla daha sık etkileşime geçmek için klavye, fare, dokunmatik yüzey, ekran kalemi veya oyun kumandası kullanırlar. Uygulamanızın harici cihazlardan gelen girişleri kabul etmesini sağlamak için aşağıdakileri yapın:
- Sekme ve ok tuşu klavyeyle gezinme gibi temel klavye desteğini test etme, Medya uygulamalarında tuş metin girişi onayını girme ve Boşluk tuşuyla oynatma/duraklatma
- Uygun durumlarda standart klavye kısayolları ekleyin. Örneğin, geri almak için Ctrl + Z ve kaydetmek için Ctrl + S
- Özel görünümlerde içerik menüsü için sağ tıklama, fareyle üzerine gelindiğinde simge değişiklikleri ve fare tekerleği veya dokunmatik yüzey kaydırma etkinlikleri aracılığıyla temel fare etkileşimlerini test edin
- Çizim uygulamaları için ekran kalemi, oyunlar için oyun kumandaları ve müzik uygulamaları için MIDI kumandaları gibi uygulamaya özel giriş cihazlarını test edin
- Uygulamanın masaüstü ortamlarında öne çıkmasını sağlayabilecek gelişmiş giriş desteğini değerlendirin. Örneğin, DJ uygulamaları için çapraz geçiş yapmak üzere dokunmatik alan, oyunlar için fare yakalama ve klavyeye odaklanan kullanıcılar için kapsamlı klavye kısayolları
Klavye
Uygulamanızın klavye girişine yanıt verme şekli, iyi bir büyük ekran deneyimine katkıda bulunur. Üç tür klavye girişi vardır: gezinme, tuş vuruşları ve kısayollar.
Navigasyon
Klavyeyle gezinme, dokunma merkezli uygulamalarda nadiren uygulanır ancak kullanıcılar bir uygulama kullanırken ve ellerini klavyeye koyduklarında bunu beklerler. Ayrıca telefon, tablet, katlanabilir cihaz ve masaüstü cihazlarda erişilebilirlik ihtiyaçları olan kullanıcılar için de son derece önemli olabilir.
Birçok uygulama için gereken tek şey basit ok tuşu ve
sekmede gezinmektir. Bu işlem çoğunlukla Android yapısı tarafından otomatik olarak işlenir. Örneğin, bir Button
görünümüne varsayılan olarak odaklanılabilir ve klavyeyle gezinme genellikle ek kod olmadan çalışır. Varsayılan olarak odaklanılamayan görünümlerde klavyeyle gezinmeyi etkinleştirmek için geliştiriciler bunları odaklanılabilir olarak işaretlemelidir. Bu işlem aşağıda gösterildiği gibi programatik olarak veya XML olarak yapılabilir. Daha fazla bilgi için Odaklanma İşleme bölümüne bakın.
Kotlin
yourView.isFocusable = true
Java
yourView.setFocusable(true);
Alternatif olarak, düzen dosyanızda focusable
özelliğini ayarlayabilirsiniz:
android:focusable="true"
Odak etkinleştirildikten sonra Android çerçevesi, tüm odaklanılabilir görünümler için konumlarına göre bir gezinme eşlemesi oluşturur. Bu genellikle beklendiği gibi çalışır ve başka bir işlem yapmanız gerekmez. Varsayılan eşleme bir uygulamanın ihtiyaçları için doğru değilse aşağıdaki şekilde geçersiz kılınabilir:
Kotlin
// Arrow keys yourView.nextFocusLeftId = R.id.view_to_left yourView.nextFocusRightId = R.id.view_to_right yourView.nextFocusTopId = R.id.view_above yourView.nextFocusBottomId = R.id.view_below // Tab key yourView.nextFocusForwardId = R.id.next_view
Java
// Arrow keys yourView.setNextFocusLeftId(R.id.view_to_left); yourView.setNextFocusRightId(R.id.view_to_left); yourView.setNextFocusTopId(R.id.view_to_left); yourView.setNextFocusBottomId(R.id.view_to_left); // Tab key yourView.setNextFocusForwardId(R.id.next_view);
Uygulamanızın her işlevine her sürümden önce yalnızca klavyeyi kullanarak erişmeye çalışmak iyi bir uygulamadır. En yaygın işlemlere fare veya dokunma girişi olmadan kolayca erişilebilmelidir.
Erişilebilirlik ihtiyaçları olan kullanıcılar için klavye desteğinin çok önemli olabileceğini unutmayın.
Tuş vuruşları
EditText
gibi ekrandaki bir sanal klavye (IME) tarafından işlenecek metin girişleri için uygulamalar, geliştiricinin herhangi bir ek işlem yapmasına gerek kalmadan büyük ekranlı cihazlarda beklendiği gibi davranmalıdır. Çerçeve tarafından tahmin edilemeyen tuş vuruşlarını uygulamaların kendilerinin yönetmesi gerekir. Bu, özellikle özel görünümlere sahip
uygulamalar için geçerlidir.
Mesaj göndermek için Enter tuşunu kullanan sohbet uygulamaları, boşluk tuşuyla oynatmayı başlatıp durduran medya uygulamaları ve w, a, s ve d tuşlarıyla hareketi kontrol eden oyunlar buna örnek olarak verilebilir.
Çoğu uygulama onKeyUp()
geri çağırmasını geçersiz kılar ve alınan her anahtar kodu için beklenen davranışı aşağıda gösterildiği gibi ekler:
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_ENTER -> { sendChatMessage() true } KeyEvent.KEYCODE_SPACE -> { playOrPauseMedia() true } else -> super.onKeyUp(keyCode, event) } }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { sendMessage(); return true; } else if (KeyEvent.KEYCODE_SPACE){ playOrPauseMedia(); return true; } else { return super.onKeyUp(keyCode, event); } }
Bir anahtar serbest bırakıldığında onKeyUp
etkinliği gerçekleşir. Bu geri çağırma, bir anahtarın basılı tutulması veya yavaş bir şekilde bırakılması halinde uygulamaların birden fazla onKeyDown
etkinliğini işlemesini önler. Bir tuşa basıldığı anda bilmek isteyen veya kullanıcıların klavye tuşlarını basılı tutmasını bekleyen oyunlar ve uygulamalar, onKeyDown()
etkinliğini arayabilir ve tekrarlanan onKeyDown
etkinliklerini kendileri işleyebilir.
Klavye desteği sağlama hakkında daha fazla bilgi için Klavye işlemlerini işleme konusuna bakın.
Kısayollar
Donanım klavyesi kullanılırken yaygın olarak kullanılan Ctrl, Alt ve Üst Karakter tabanlı kısayollar beklenir. Uygulama bunları yapmazsa kullanıcı deneyimi sinir bozucu olabilir. İleri düzey kullanıcılar, uygulamaya özgü sık kullanılan görevlerin kısayollarını da takdir ederler. Kısayollar, bir uygulamanın kullanımını kolaylaştırır ve kısayolu olmayan uygulamalardan ayırt edilmesini sağlar.
Ctrl + S (kaydet), Ctrl + Z (geri al) ve Ctrl + Üst Karakter + Z (yeniden yap) gibi sık kullanılan kısayollardan bazılarıdır. Daha gelişmiş bazı kısayollar için VLC Media Player kısayol tuşları listesine bakın.
Kısayollar, dispatchKeyShortcutEvent()
kullanılarak uygulanabilir.
Bu, belirli bir anahtar kodu için tüm meta tuş kombinasyonlarını (Alt, Ctrl ve Üst Karakter) keser. Belirli bir meta anahtar olup olmadığını kontrol etmek için KeyEvent.isCtrlPressed()
, KeyEvent.isShiftPressed()
, KeyEvent.isAltPressed()
veya KeyEvent.hasModifiers()
kullanın.
Kısayol kodunu diğer tuş vuruşu işlemlerinden (ör. onKeyUp()
ve onKeyDown()
) ayırmak, kod bakımını kolaylaştırabilir ve her durumda manuel olarak meta anahtar kontrolleri uygulamak zorunda kalmadan meta anahtarları varsayılan olarak kabul edilmesini sağlar. Tüm meta tuş kombinasyonlarına izin vermek, farklı klavye düzenlerine ve işletim sistemlerine alışkın olan kullanıcılar için de daha kullanışlı olabilir.
Kotlin
override fun dispatchKeyShortcutEvent(event: KeyEvent): Boolean { return when (event.keyCode) { KeyEvent.KEYCODE_O -> { openFile() // Ctrl+O, Shift+O, Alt+O true } KeyEvent.KEYCODE_Z-> { if (event.isCtrlPressed) { if (event.isShiftPressed) { redoLastAction() // Ctrl+Shift+Z pressed true } else { undoLastAction() // Ctrl+Z pressed true } } } else -> { return super.dispatchKeyShortcutEvent(event) } } }
Java
@Override public boolean dispatchKeyShortcutEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_O) { openFile(); // Ctrl+O, Shift+O, Alt+O return true; } else if(event.getKeyCode() == KeyEvent.KEYCODE_Z) { if (event.isCtrlPressed()) { if (event.isShiftPressed()) { redoLastAction(); return true; } else { undoLastAction(); return true; } } } return super.dispatchKeyShortcutEvent(event); }
Yukarıdakiyle aynı şekilde KeyEvent.isCtrlPressed()
, KeyEvent.isShiftPressed()
veya KeyEvent.isAltPressed()
öğelerini kontrol ederek onKeyUp()
içinde de kısayollar uygulayabilirsiniz. Meta davranış, kısayoldan ziyade uygulama davranışında yapılan bir değişiklik ise bunu sağlamak daha kolay olabilir.
Örneğin, W "ileri gitmek" ve Üst Karakter + W "ileri koş" anlamına geldiğinde.
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_W-> { if (event.isShiftPressed) { if (event.isCtrlPressed) { flyForward() // Ctrl+Shift+W pressed true } else { runForward() // Shift+W pressed true } } else { walkForward() // W pressed true } } else -> super.onKeyUp(keyCode, event) } }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_W) { if (event.isShiftPressed()) { if (event.isCtrlPressed()) { flyForward(); // Ctrl+Shift+W pressed return true; } else { runForward(); // Shift+W pressed return true; } } else { walkForward(); return true; } } return super.onKeyUp(keyCode, event); }
Ekran kalemi
Büyük ekranlı cihazların çoğunda ekran kalemi bulunur. Android uygulamaları bunu dokunmatik ekran girişi olarak kullanır. Bazı cihazlarda Wacom Intuos gibi bir USB veya Bluetooth çizim tablosu da olabilir. Android uygulamaları Bluetooth girişi alabilir, ancak USB girişiyle çalışmaz.
Ekran kalemi etkinliği, View.onTouchEvent()
veya View.onGenericMotionEvent()
aracılığıyla dokunmatik ekran etkinliği olarak raporlanır ve
SOURCE_STYLUS
türünde
MotionEvent.getSource()
içerir.
MotionEvent
, ek veriler de içerecek:
MotionEvent.getToolType()
, yüzeyle temas eden araca bağlı olarakTOOL_TYPE_FINGER
, TOOL_TYPE_STYLUS veyaTOOL_TYPE_ERASER
değerini döndürürMotionEvent.getPressure()
, ekran kalemine uygulanan fiziksel basıncı belirtir (destekleniyorsa)- Ekran kaleminin fiziksel yatırma ve yönünü okumak için kullanılabilen
MotionEvent.AXIS_TILT
veMotionEvent.AXIS_ORIENTATION
ileMotionEvent.getAxisValue()
(destekleniyorsa)
Geçmiş puanlar
Android, giriş etkinliklerini toplu hale getirir ve kare başına bir kez gönderir. Ekran kalemi, etkinlikleri ekrandan çok
daha yüksek sıklıkta raporlayabilir. Çizim uygulamaları oluştururken getHistorical
API'lerini kullanarak yakın zamanda gerçekleşmiş olabilecek etkinlikleri kontrol etmek önemlidir:
MotionEvent.getHistoricalX()
MotionEvent.getHistoricalY()
MotionEvent.getHistoricalPressure()
MotionEvent.getHistoricalAxisValue()
Avuç içi reddi
Kullanıcılar ekran kalemi kullanarak çizerken, yazarken veya uygulamanızla
etkileşimde bulunurken bazen avuçlarıyla ekrana dokunurlar. Dokunma etkinliği (ACTION_DOWN
veya ACTION_POINTER_DOWN
olarak ayarlanmış) sistem, yanlışlıkla avuç içi dokunuşunu tanıyıp dikkate almadan uygulamanıza bildirilebilir.
Android, avuç içi dokunma etkinliklerini bir MotionEvent
göndererek iptal eder. Uygulamanız ACTION_CANCEL
alırsa hareketi iptal edin. Uygulamanızda ACTION_POINTER_UP
kullanılıyorsa FLAG_CANCELED
'in ayarlanıp ayarlanmadığını kontrol edin. Öyleyse hareketi iptal edin.
Yalnızca FLAG_CANCELED
için kontrol etmeyin. Android 13'ten itibaren sistem, ACTION_CANCEL
etkinlikleri için FLAG_CANCELED
özelliğini ayarlamaktadır ancak önceki sürümlerde bunu ayarlamamaktadır.
Android 12
Android 12 (API düzeyi 32) ve önceki sürümlerde avuç içi reddinin algılanması yalnızca tek noktalı dokunma etkinliklerinde mümkündür. Tek işaretçi avuç içine dokunmaysa sistem, hareket etkinliği nesnesine ACTION_CANCEL
değerini ayarlayarak etkinliği iptal eder.
Diğer işaretçiler hatalıysa sistem ACTION_POINTER_UP
değerini ayarlar. Bu, avuç içi reddinin algılanması için yeterli değildir.
Android 13
Android 13 (API düzeyi 33) ve sonraki sürümlerde, tek işaretçi avuç içine dokunmaksa sistem, hareket etkinliği nesnesinde ACTION_CANCEL
ve FLAG_CANCELED
öğelerini ayarlayarak etkinliği iptal eder. Diğer işaretçiler çalışmıyorsa sistem, ACTION_POINTER_UP
ve FLAG_CANCELED
öğelerini ayarlar.
Uygulamanız ACTION_POINTER_UP
ile bir hareket etkinliği aldığında, etkinliğin avuç içi reddi (veya başka bir etkinlik iptali) gösterip göstermediğini belirlemek için FLAG_CANCELED
özelliğini kontrol edin.
Not alma uygulamaları
ChromeOS, kullanıcılara kayıtlı not alma uygulamalarını gösteren özel bir amaca sahiptir. Bir uygulamayı not alma uygulaması olarak kaydetmek için aşağıdaki kodu Android manifest dosyasına ekleyin:
<intent-filter>
<action android:name="org.chromium.arc.intent.action.CREATE_NOTE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Bir uygulama kaydedildiğinde, kullanıcı bunu varsayılan not alma uygulaması olarak seçebilir. Yeni bir not istendiğinde uygulama, ekran kalemi girişi için hazır boş bir not oluşturmalıdır. Kullanıcı bir resme (ekran görüntüsü veya indirilen resim gibi) ek açıklama eklemek istediğinde uygulama, content://
URI'ları olan bir veya daha fazla öğe içeren ClipData
ile başlatılır. Uygulama, eklenen ilk resmi arka plan resmi olarak kullanan bir not oluşturmalı ve kullanıcının ekranda ekran kalemiyle çizim yapabileceği bir moda girmelidir.
Not alma amaçlarını ekran kalemi olmadan test edin
Bir uygulamanın, aktif ekran kalemi olmadan not alma amaçlarına doğru şekilde yanıt verip vermediğini test etmek için aşağıdaki yöntemi kullanarak not alma seçeneklerini ChromeOS'te görüntüleyin:
- Geliştirici moduna geçin ve cihazı yazılabilir hale getirin
- Bir terminal açmak için Ctrl + Alt + F2 tuşlarına basın
sudo vi /etc/chrome_dev.conf
komutunu çalıştırın--ash-enable-palette
öğesini düzenlemek ve dosyanın sonundaki yeni bir satıra eklemek içini
tuşuna basın- Esc tuşuna basıp :, w, q yazıp Enter tuşuna basarak kaydedin
- Normal ChromeOS kullanıcı arayüzüne dönmek için Ctrl + Alt + F1 tuşlarına basın.
- Çıkış yapın ve tekrar giriş yapın
Artık rafta bir ekran kalemi menüsü bulunur:
- Raftaki ekran kalemi düğmesine dokunun ve Yeni not'u seçin. Boş bir çizim notu açılır.
- Ekran görüntüsü alın. Raftan ekran kalemi düğmesi > Ekran görüntüsü al'ı seçin veya bir resim indirin. Bildirimde "Resimlere ek açıklama ekle" seçeneği olacaktır. Uygulama, ek açıklama eklenmeye hazır bir şekilde başlar.
Fare ve dokunmatik alan desteği
Çoğu uygulamanın genellikle yalnızca üç büyük ekran merkezli etkinliği işlemesi gerekir: sağ tıklama, fareyle üzerine gelme ve sürükle ve bırakma.
Sağ tıklama
Bir uygulamanın içerik menüsü göstermesine neden olan tüm işlemler (ör. bir liste öğesine dokunup basılı tutma) sağ tıklama etkinliklerine de tepki vermelidir. Sağ tıklama etkinliklerini işlemek için uygulamaların bir View.OnContextClickListener
kaydetmesi gerekir.
Bağlam menüsü oluşturmayla ilgili ayrıntılar için Bağlamsal Menüler Oluşturma bölümüne bakın.
Kotlin
yourView.setOnContextClickListener { showContextMenu() true }
Java
yourView.setOnContextClickListener(v -> { showContextMenu(); return true; });
İmleçle üzerine gelin
Geliştiriciler, fareyle üzerine gelme etkinliklerinden yararlanarak uygulama düzenlerini şık ve kullanımı kolay hale getirebilir. Bu durum özellikle özel görünümler için geçerlidir. Bunun en yaygın iki örneği şunlardır:
- Fare işaretçisi simgesini değiştirerek bir öğenin tıklanabilir veya düzenlenebilir olma gibi etkileşimli davranışı olup olmadığını kullanıcılara bildirme
- İşaretçinin üzerine geldiğinde büyük bir liste veya ızgaradaki öğelere görsel geri bildirim ekleme
Kotlin
// Change the icon to a "hand" pointer on hover, // Highlight the view by changing the background. yourView.setOnHoverListener { view, _ -> addVisualHighlighting(true) view.pointerIcon = PointerIcon.getSystemIcon(view.context, PointerIcon.TYPE_HAND) false // listener did not consume the event. }
Java
yourView.setOnHoverListener((view, event) -> { addVisualHighlighting(true); view.setPointerIcon(PointerIcon .getSystemIcon(view.getContext(), PointerIcon.TYPE_HAND)); return true; });
Sürükleyin ve bırakın
Çok pencereli bir ortamda kullanıcılar, öğeleri uygulamalar arasında sürükleyip bırakabilmeyi bekler. Bu durum masaüstü cihazların yanı sıra tabletler, telefonlar ve bölünmüş ekran modundaki katlanabilir cihazlar için de geçerlidir.
Geliştiriciler, kullanıcıların uygulamalarına öğe sürükleme ihtimalinin olup olmadığını dikkate almalıdırlar. Yaygın örneklerden bazıları şunlardır: Fotoğraf düzenleyicileri fotoğraf, ses çalarlar ve çizim programları fotoğraf almayı beklemelidir.
Sürükleyip bırakma desteği eklemek için Android Sürükle ve bırak dokümanlarındaki talimatları uygulayın ve bu ChromeOS blog yayınına göz atın.
ChromeOS ile ilgili özel noktalar
- Uygulamanın dışından sürüklenen öğelere
erişmek için
requestDragAndDropPermissions
üzerinden izin istemeyi unutmayın. - Bir öğenin diğer uygulamalara sürüklenebilmesi için
View.DRAG_FLAG_GLOBAL
işaretinin olması gerekir
Gelişmiş işaretçi desteği
Fare ve dokunmatik alan girişlerini gelişmiş şekilde işleyen uygulamalar View.onGenericMotionEvent()
ile ilgili Android dokümanlarına uymalı ve SOURCE_MOUSE
ile SOURCE_TOUCHSCREEN
birbirinden ayırt etmek için MotionEvent.getSource()
kullanmalıdır.
Gerekli davranışı uygulamak için MotionEvent
inceleyin:
- Hareket
ACTION_HOVER_MOVE
etkinlik oluşturur. - Düğmeler
ACTION_BUTTON_PRESS
veACTION_BUTTON_RELEASE
etkinlikleri oluşturur. Ayrıca,getButtonState()
kullanarak tüm fare/dokunmatik alan düğmelerinin mevcut durumunu kontrol edebilirsiniz. - Fare tekerleği kaydırması
ACTION_SCROLL
etkinlik oluşturur.
Oyun kumandaları
Bazı büyük ekranlı Android cihazlar dört adede kadar oyun kumandasını destekler. Geliştiriciler, bu API'leri işlemek için standart Android oyun kumandası API'lerini kullanmalıdır (Oyun kumandalarını destekleme bölümüne bakın).
Düğmeler, ortak bir eşlemenin ardından ortak değerlerle eşlenir. Maalesef tüm oyun kumandası üreticileri aynı eşleme kurallarını uygulamamaktadır. Kullanıcıların farklı popüler kumanda eşlemeleri seçmesine izin verirseniz çok daha iyi bir deneyim sunabilirsiniz. Daha fazla bilgi için Oyun kumandası düğmesine basılanları işleme bölümüne bakın.
Giriş çeviri modu
ChromeOS, varsayılan olarak giriş çeviri modunu etkinleştirir. Çoğu Android uygulaması için bu mod, uygulamaların masaüstü ortamında beklendiği gibi çalışmasına yardımcı olur. Buna örnek olarak dokunmatik alanda iki parmakla kaydırmanın otomatik olarak etkinleştirilmesi, fare tekerleğiyle kaydırma ve ham ekran koordinatlarının pencere koordinatlarıyla eşlenmesi verilebilir. Genel olarak, uygulama geliştiricilerin bu davranışlardan hiçbirini kendilerinin uygulaması gerekmez.
Bir uygulama, özel iki parmakla dokunmatik alan sıkıştırma işlemi tanımlamak gibi özel giriş davranışı uyguluyorsa veya bu giriş çevirileri uygulamanın beklediği giriş etkinliklerini sağlamıyorsa Android manifest dosyasına aşağıdaki etiketi ekleyerek giriş çevirisi modunu devre dışı bırakabilirsiniz:
<uses-feature
android:name="android.hardware.type.pc"
android:required="false" />
Ek kaynaklar
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Android uygulamasında ekran kalemi desteğini geliştirme
- Özel metin düzenleyiciler
- Tablet ve büyük ekran desteği