ChromeOS cihazlarda birçok kullanıcı uygulamalarla etkileşim kurmak için klavye, fare, dokunmatik yüzey, kalem veya oyun kumandası kullanır. Bu giriş cihazları Android telefonlarda da kullanılsa da yaygın değildir ve geliştiriciler tarafından genellikle göz ardı edilir.
Uygulamalarının ChromeOS'te ve büyük ekranlı diğer Android cihazlarda girişle iyi çalışmasını isteyen geliştiriciler aşağıdaki optimizasyonları incelemelidir:
- Ok ve sekme tuşlarını kullanarak klavye ile gezinme, metin girişini onaylamak için Enter tuşu ve medya uygulamalarında oynatma/duraklatma için boşluk tuşu gibi temel klavye desteği ekleyin ve test edin.
-
Geçerli olan yerlerde standart klavye kısayollarını ekleyin. Örneğin, geri alma için
ctrl+z, kaydetme içinctrl+s. - Bağlam menüsü için sağ tıklama, fareyle üzerine gelindiğinde simge değişiklikleri ve özel görünümlerde fare tekerleği/izleme paneli kaydırma etkinlikleri gibi temel fare etkileşimlerini test edin.
- Çizim uygulamaları için kalem, 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 göz önünde bulundurun: DJ uygulamaları için çapraz geçiş fader'ı olarak dokunmatik alan, oyunlar için fare yakalama ve ileri düzey kullanıcılar için kapsamlı klavye kısayolları.
Klavye
Uygulamanızın klavye girişine yanıt verme şekli, iyi bir masaüstü deneyimi sunmanıza yardımcı olur. Üç tür klavye girişi vardır: gezinme, tuş vuruşları ve kısayollar.
Navigasyon
Klavyeyle gezinme, dokunmaya odaklı uygulamalarda nadiren uygulanır ancak kullanıcılar klavye ile uygulama kullanırken bu özelliği bekler. Bu özellik, hem telefonlarda hem de masaüstü cihazlarda erişilebilirlik ihtiyaçları olan kullanıcılar için de önemli olabilir.
Çoğu uygulamada ok tuşu ve sekme ile gezinme yeterlidir ve bu işlem genellikle Android çerçevesi tarafından otomatik olarak gerçekleştirilir. Örneğin, bir Button görünümü varsayılan olarak odaklanılabilir ve klavye ile gezinme genellikle ek kod olmadan çalışır. Varsayılan olarak odaklanılamayan görünümlerde klavye ile gezinmeyi etkinleştirmek için geliştiricilerin bu görünümleri odaklanılabilir olarak işaretlemesi gerekir. Bu işlem, aşağıda gösterildiği gibi programatik olarak veya XML'de yapılabilir. Daha fazla bilgi için Odak İşleme belgelerini inceleyin.
yourView.isFocusable = true
Alternatif olarak, düzen dosyanızda focusable özelliğini ayarlayabilirsiniz:
android:focusable="true"
Odak etkinleştirildikten sonra Android çerçevesi, odaklanılabilir tüm 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 yapılması gerekmez. Varsayılan eşleme, bir uygulamanın ihtiyaçları için doğru olmadığında aşağıdaki şekilde geçersiz kılınabilir:
// 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
Yalnızca klavyeyi kullanarak her sürümden önce uygulamanızın tüm işlevlerine erişmeyi denemeniz iyi bir uygulamadır. En yaygın işlemlere fare veya dokunma girişi olmadan erişilebilmelidir.
Not: Erişilebilirlik ihtiyaçları olan kullanıcılar için klavye desteğinin önemli olabileceğini unutmayın.
Tuş vuruşları
EditText gibi bir ekran üstü sanal klavye (IME) tarafından işlenecek metin girişi için uygulamalar, geliştiricinin ek bir işlem yapmasına gerek kalmadan ChromeOS'te beklendiği gibi çalışmalıdır. Çerçeve tarafından tahmin edilemeyen tuş vuruşları için uygulamaların davranışı kendilerinin yönetmesi gerekir. Bu durum özellikle özel görünümlere sahip uygulamalar için geçerlidir.
Örneğin, mesaj göndermek için Enter tuşunu kullanan sohbet uygulamaları, oynatmayı başlatmak/durdurmak için boşluk tuşunu kullanan medya uygulamaları ve hareketi kontrol etmek için W, A, S ve D tuşlarını kullanan oyunlar.
Çoğu uygulama, onKeyUp etkinliğini geçersiz kılar ve alınan her tuş kodu için beklenen davranışı aşağıdaki gibi ekler.
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) } }
onKeyUp kullanmak, bir tuş basılı tutulduğunda veya yavaşça bırakıldığında uygulamaların birden fazla etkinlik almasını engeller. Kullanıcıların klavye tuşlarını basılı tutmasını gerektiren oyunlar ve uygulamalar onKeyDown etkinliğini arayabilir.
Bir uygulamanın ihtiyaçlarına bağlı olarak, onKeyUp'ı tüm etkinlik için geçersiz kılmak genellikle gerekli davranışı sağlar. Gerekirse belirli bir görünüme onKeyListener eklenebilir. Örneğin, bir uygulama yalnızca kullanıcı bir sohbet kutusuna yazarken gönderme işlevini uygulamak için belirli bir EditText'te (Etkinlikte değil) Enter tuşunu dinleyebilir.
Klavye desteği eklerken Android Klavye işleme dokümanlarını inceleyin.
Kısayollar
Masaüstü ortamlarında yaygın olarak kullanılan ctrl, alt ve shift tabanlı kısayollar beklenir. Bir uygulama bu özellikleri uygulamıyorsa kullanıcılar deneyimin sinir bozucu ve bozuk olduğunu düşünebilir. İleri düzey kullanıcılar, sık kullanılan uygulamaya özgü görevler için kısayolları da faydalı bulur. Kısayollar, uygulamaların kullanımını kolaylaştırır ve kısayol içermeyen uygulamalardan farklılaşmasını sağlar.
Sık kullanılan bazı kısayollar arasında kaydet (ctrl+s), geri al (ctrl+z) ve yinele (ctrl+shift+z) yer alır. Daha gelişmiş kısayollara örnek olarak VLC Media Player kısayol tuşları listesine göz atın.
Kısayollar dispatchKeyShortcutEvent kullanılarak uygulanabilir. Bu, belirli bir anahtar kodu için tüm meta anahtar kombinasyonlarını (alt, ctrl ve shift) yakalar. Belirli bir meta anahtarı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 veya onKeyDown) ayırmak, kod bakımını kolaylaştırabilir ve her durumda meta anahtar kontrollerini manuel olarak uygulamak zorunda kalmadan meta anahtarların varsayılan kabulünü koruyabilir. Tüm meta anahtar kombinasyonlarına izin vermek, farklı klavye düzenlerine ve işletim sistemlerine alışkın kullanıcılar için de daha uygun olabilir.
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) } } }
Aynı şekilde KeyEvent.isCtrlPressed(), KeyEvent.isShiftPressed() veya KeyEvent.isAltPressed() için kontrol ederek onKeyUp'da da kısayollar uygulayabilirsiniz. Meta davranış, kısayoldan ziyade uygulama davranışında yapılan bir değişiklikse bu yaklaşımı sürdürmek daha kolay olabilir. Örneğin, w tuşu "ileri yürü" anlamına gelirken shift+w tuşu "ileri koş" anlamına geliyor olabilir.
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 } } else -> super.onKeyUp(keyCode, event) } }
Fare ve dokunmatik alan desteği
ChromeOS, çoğu fare ve dokunmatik yüzey etkinliğini otomatik olarak işleyerek Android telefondaki dokunma etkinlikleri gibi davranmalarını sağlar. Buna iki parmakla dokunmatik yüzey/fare tekerleğiyle kaydırma da dahildir. Çoğu uygulamanın genellikle yalnızca üç masaüstü odaklı 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 uzun basma) sağ tıklama etkinliklerine de tepki vermelidir. Uygulamalar, sağ tıklama etkinliklerini işlemek için View.OnContextClickListener kaydetmelidir. İçerik menüsü oluşturmayla ilgili ayrıntılar için Android içerik menüsü belgelerine bakın.
yourView.setOnContextClickListener { view -> showContextMenu() true }
Not: Activity.registerForContextMenu() kullanılarak bir bağlam menüsü için kaydedilen tüm görünümler, bağlam tıklaması dinleyicisi kaydetmeye gerek kalmadan hem uzun basma hem de sağ tıklama ile otomatik olarak çalışır.
İmleçle üzerine gelin
Geliştiriciler, fareyle üzerine gelme etkinliklerini işleyerek uygulama düzenlerinin daha iyi görünmesini ve daha kolay kullanılmasını sağlayabilir. 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 kullanıcılara bir öğenin tıklanabilir veya düzenlenebilir gibi etkileşimli davranışa sahip olup olmadığını belirtme
- İşaretçi üzerine geldiğinde büyük bir listedeki veya ızgaradaki öğelere görsel geri bildirim ekleme
// 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(applicationContext, PointerIcon.TYPE_HAND) false // listener did not consume the event. }
Sürükleme ve bırakma
Çok pencereli bir ortamda kullanıcılar, öğeleri uygulamalar arasında sürükleyip bırakabilmeyi bekler. Bu durum, ChromeOS cihazların yanı sıra bölünmüş ekran modundaki tabletler, telefonlar ve katlanabilir cihazlar için de geçerlidir.
Geliştiriciler, kullanıcıların öğeleri uygulamalarına sürükleme olasılığını göz önünde bulundurmalıdır. Bazı yaygın örnekler: fotoğraf düzenleyiciler fotoğraf almayı, ses çalarlar ses dosyası almayı ve çizim programları fotoğraf almayı beklemelidir.
Sürükle ve bırak desteği eklemek için Android Sürükle ve Bırak belgelerini inceleyin ve bu ChromeOS blog yayınını inceleyin.
ChromeOS ile ilgili dikkat edilmesi gereken noktalar
-
ChromeOS Dosyalar uygulamasındaki dosyaları işlemek için MIME türünü bulun.
application/x-arc-uri-list -
Uygulamanın dışından sürüklenen öğelere erişmek için
requestDragAndDropPermissionskullanarak izin istemeyi unutmayın. -
Bir öğenin diğer uygulamalara sürüklenebilmesi için
View.DRAG_FLAG_GLOBALişaretine sahip olması gerekir.
Birden fazla öğe seçme desteği
Uygulamanızda listeler veya ızgaralar varsa kullanıcılarınızın çoklu seçim desteğinden yararlanıp yararlanmayacağını değerlendirin. Fare ve izleme dörtgeniyle yüksek kaliteli çoklu seçim deneyimi genellikle bant seçimi gibi özellikleri içerir. Bunu kendi başınıza uygulamak zor olabilir ancak RecyclerView Selection kitaplığını kullanabilirsiniz.
Gelişmiş işaretçi desteği
Fare ve dokunmatik alan girişini gelişmiş şekilde işleyen uygulamalar, View.onGenericMotionEvent() ile ilgili Android dokümanlarını takip etmeli ve SOURCE_MOUSE ile SOURCE_TOUCHSCREEN arasında ayrım yapmak için MotionEvent.getSource() kullanmalıdır.
Gerekli davranışı uygulamak için MotionEvent öğesini inceleyin:
-
Hareket
ACTION_HOVER_MOVEetkinlikleri oluşturur -
Düğmeler
ACTION_BUTTON_PRESSveACTION_BUTTON_RELEASEetkinlikleri oluşturur. Ayrıca,getButtonState()kullanarak tüm fare/izleme paneli düğmelerinin mevcut durumunu da kontrol edebilirsiniz. -
Fare tekerleğiyle kaydırma işlemi
ACTION_SCROLLetkinlikleri oluşturur
Ekran kalemi
Birçok Chromebook'ta ekran kalemi bulunur ve Android uygulamaları bunu dokunmatik ekran girişi olarak işler. Bazı cihazlarda Wacom Intuos gibi USB veya Bluetooth çizim tableti de olabilir. Android uygulamaları Bluetooth girişi alabilir ancak USB girişiyle çalışmaz.
Kalem etkinliği, View.onTouchEvent() veya View.onGenericMotionEvent() kullanılarak dokunmatik ekran etkinliği olarak bildirilir ve SOURCE_STYLUS türünde bir MotionEvent.getSource() içerir. MotionEvent ayrıca ek veriler de içerir:
-
MotionEvent.getToolType(), yüzeyle temas eden araca bağlı olarakTOOL_TYPE_FINGER,TOOL_TYPE_STYLUSveyaTOOL_TYPE_ERASERdeğerini döndürür. -
MotionEvent.getPressure(), destekleniyorsa kalemle uygulanan fiziksel basıncı bildirir. -
Destekleniyorsa kalemin fiziksel eğimini ve yönünü okumak için kullanılabilecek
MotionEvent.AXIS_TILTveMotionEvent.AXIS_ORIENTATIONileMotionEvent.getAxisValue()
Geçmiş puanlar
Android, giriş etkinliklerini toplu olarak işler ve her kare için bir kez teslim eder. Kalem, etkinlikleri ekrana kıyasla çok daha yüksek sıklıkta bildirebilir. Çizim uygulamaları oluştururken getHistorical API'lerini kullanarak yakın geçmişte gerçekleşmiş olabilecek etkinlikleri kontrol etmeniz önemlidir:
-
MotionEvent.getHistoricalX() -
MotionEvent.getHistoricalY() -
MotionEvent.getHistoricalPressure() -
MotionEvent.getHistoricalAxisValue()
Avuç içiyle dokunmayı reddetme
ChromeOS, kullanıcının avuç içi dokunmatik ekrana dayandığında bunu tanımaya çalışır. Ancak bu her zaman mümkün olmayabilir. Bazen bir dokunma etkinliği, işletim sistemi bunu avuç içi olarak tanımadan önce uygulamaya bildirilebilir. Bu durumda, ACTION_CANCEL etkinliği raporlanarak dokunmalar iptal edilir.
Bu etkinlik, uygulamaya belirli dokunuşların geçersiz olduğunu ve bu dokunuşların neden olduğu tüm etkileşimleri geri alması gerektiğini bildirir. Örneğin, bir çizim uygulaması en düşük gecikmeyi sağlamak için yeni çizgileri alır almaz geçici olarak çizebilir ancak dokunma serisi temiz bir şekilde tamamlandıktan sonra bunları tuvale kalıcı olarak işleyebilir. Bu süre zarfında dokunma etkinlikleri iptal edilirse geçici çizgiler silinebilir.
Not: Çizim ve yazma uygulamalarında gereksiz avuç içi ve parmak etkinliklerini azaltmanın bir yolu, dokunarak çizme işlevini devre dışı bırakan ve bu modda yalnızca ekran kalemi etkinliklerini kullanarak çizim yapmaya olanak tanıyan bir kullanıcı arayüzü ayarı sunmaktır.
Not alma uygulamaları
ChromeOS'te, kayıtlı not alma uygulamalarını kullanıcılara gösteren özel bir amaç vardır. Bir uygulamayı not alma uygulaması olarak kaydetmek için Android manifestine aşağıdakileri 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ı, bu uygulamayı varsayılan not alma uygulaması olarak seçebilir. Yeni bir not istendiğinde uygulama, kalemle giriş için hazır boş bir not oluşturmalıdır. Kullanıcı bir resme (ör. ekran görüntüsü veya indirilen resim) açıklama eklemek istediğinde uygulama, content:// URI'leri içeren 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ıya kalemle çizim yapma imkanı sunmalıdır.
Ekran kalemi olmadan not alma amaçlarını test etme
Bir uygulamanın, aktif bir kalem olmadan not alma amaçlarına doğru şekilde yanıt verip vermediğini test etmek için not alma seçeneklerini görüntülemek üzere aşağıdaki yöntemi kullanın:
- Geliştirici moduna geçme ve cihazı yazılabilir hale getirme
-
Terminal açmak için
ctrl+alt+f2tuşlarına basın. -
sudo vi /etc/chrome_dev.confkomutunu çalıştırın. -
ituşuna basarak düzenleyin ve dosyanın sonundaki yeni satıra--ash-enable-paletteekleyin. -
Esctuşuna basın, ardından:,w,qyazıpEntertuşuna basarak kaydedin. -
Normal ChromeOS kullanıcı arayüzüne dönmek için
ctrl+alt+f1tuşlarına basın.
Rafınızda artık bir kalem menüsü olmalıdır:
- Rafın içindeki kalem düğmesine dokunup Yeni not'u seçin. Boş bir çizim notu açılır.
- Ekran görüntüsü alın. Raf bölümünde kalem düğmesi > Ekranı yakala'yı seçin veya bir resim indirin. Bildirimde "Resme açıklama ekle" seçeneği olmalıdır. Bu işlem, uygulamayı açıklama eklenmeye hazır bir resimle başlatır.
Oyun Kumandaları
Chromebook'lar en fazla dört oyun denetleyicisini destekler. Geliştiriciler, bunları işlemek için standart Android Game Controller API'lerini kullanmalıdır.
Düğmeler, ortak eşleme kullanılarak yaygın değerlerle eşlenir. Maalesef tüm oyun kumandası üreticileri aynı eşleme kurallarını kullanmaz. Kullanıcıların farklı popüler kontrol cihazı eşlemelerini seçmesine izin verirseniz çok daha iyi bir deneyim sunabilirsiniz.
Giriş çevirisi modu
ChromeOS, varsayılan olarak giriş çevirisi modunu etkinleştirir. Bu mod, çoğu Android uygulamasının masaüstü ortamında beklendiği gibi çalışmasına yardımcı olur. Örneğin, dokunmatik yüzeyde iki parmakla kaydırma, fare tekerleğiyle kaydırma ve ham ekran koordinatlarını pencere koordinatlarıyla eşleme otomatik olarak etkinleştirilebilir. Genellikle uygulama geliştiricilerin bu davranışların hiçbirini kendilerinin uygulaması gerekmez.
Bir uygulama özel giriş davranışı uyguluyorsa (ör. iki parmakla dokunma hareketini özel olarak tanımlama) veya bu giriş çevirileri, uygulama tarafından beklenen giriş etkinliklerini sağlamıyorsa aşağıdaki etiketi Android manifestine ekleyerek giriş çevirisi modunu devre dışı bırakabilirsiniz:
<uses-feature android:name="android.hardware.type.pc" android:required="false" />