Büyük ekranlarda giriş uyumluluğu

Kullanıcılar, büyük ekranlı cihazlarda uygulamalarla daha sık etkileşime girmek için fare, dokunmatik yüzey, ekran kalemi veya oyun kumandası. Uygulamanızın şuradan girişi kabul etmesini etkinleştirmek için: harici cihazlarda aşağıdakileri yapın:

  • Sekme ve ok tuşlarıyla klavyeyle gezinme gibi temel klavye desteğini test edin. Tuş metni girişi onayını girin ve medya uygulamalarında Boşluk tuşuyla oynatma/duraklatma
  • Uygun durumlarda standart klavye kısayolları ekleyin; örneğin, Ctrl + Z geri almak için, kaydetmek için Ctrl + S tuşlarına basın
  • Bağlam için sağ tıklama şeklinde temel fare etkileşimlerini test edin. üzerine gelindiğinde ve fare tekerleğinde veya dokunmatik yüzey kaydırma etkinliklerinde özel görünümler
  • Çizim uygulamaları veya oyunlar için ekran kalemi gibi uygulamaya özel giriş cihazlarını test edin oyunlar için kumandalar ve müzik uygulamaları için MIDI kumandaları
  • Uygulamanın öne çıkmasını sağlayabilecek gelişmiş giriş desteği göz önünde bulundurun masaüstü ortamlarda Örneğin, DJ uygulamaları için geçiş yapmak üzere dokunmatik alanı kullanabilirsiniz. oyunlar için fare yakalama ve gelişmiş klavye kısayolları klavye odaklı kullanıcılar

Klavye

Uygulamanızın klavye girişine yanıt verme şekli, iyi bir büyük ekrana katkıda bulunur sahip olacaksınız. Üç tür klavye girişi vardır: gezinme, tuş vuruşları ve kısayollar.

Dokunmatik odaklı uygulamalarda klavyeyle gezinme nadiren uygulanır ancak kullanıcılar uygulamayı kullanırken ve ellerini klavyeye koyduğunda bunu beklemezler. O da telefon, tablet ve tablet gibi cihazlarda erişilebilirlik katlanabilir cihazlar da olabilir.

Birçok uygulama için gereken tek şey ok tuşu ve sekmeyle gezinme çoğunlukla Android yapısı tarafından otomatik olarak işlenir. Örneğin, Varsayılan olarak Button odaklanılabilir ve klavyeyle gezinme işlevi genellikle çalışır. kullanabilirsiniz. Şu görünümlerde klavyeyle gezinmeyi etkinleştirmek için: geliştiriciler bunları odaklanılabilir olarak işaretlemelidir. Böylece, aşağıda gösterildiği gibi programlı olarak veya XML'de yapılmaktadır. Görüntüleyin Odaklanma Kullanım konulu videomuzu izleyin.

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 bir gezinme eşlemesi oluşturur odaklanılabilir tüm görüntülemelerde Bu genellikle beklendiği gibi çalışır ve başka bir şey yapılmasına gerek yoktur. Bir geçerli olması durumunda, bu ayar 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 işlevlerinin her bölümüne erişmeye çalışmak iyi bir uygulamadır her sürümden önce yalnızca klavyeyi kullanın. Arşivlemek istediğiniz fare veya dokunmatik giriş olmadan en sık yapılan işlemler.

Erişilebilirlik özelliklerine sahip kullanıcılar için klavye desteğinin gerekiyor.

Tuş vuruşları

Ekrandaki sanal klavye tarafından işlenecek metin girişi için (IME), ör. EditText, uygulamalar herhangi bir ek işlem gerektirmeden büyük ekranlı cihazlarda beklendiği gibi davranmalıdır. en az bir haftalık çaba gerekiyorsa Çerçeve tarafından tahmin edilemeyecek tuş vuruşları için uygulamalar kendileri tarafından yönetilmeleri gerekir. Bu durum özellikle özel görünümler oluşturabilirsiniz.

Örneğin, mesaj göndermek için Enter tuşunu kullanan sohbet uygulamaları, medya Boşluk tuşuyla oynatmayı başlatıp durduran uygulamalar ve bunu kontrol eden oyunlar klavyeyi w, a, s ve d tuşlarıyla hareket ettirin.

Çoğu uygulama onKeyUp() ve alınan her anahtar kodu için beklenen davranışı aşağıda gösterildiği gibi ekleyin aşağıda bulabilirsiniz:

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ğırmanın kullanılması, bir tuş basılı tutulduğunda uygulamaların birden fazla onKeyDown etkinliğini işlemesi gerekmez veya yavaş serbest bırakılır. Anahtarın sahibi olduğu anı bilmek isteyen oyun ve uygulamalar veya kullanıcıların klavye tuşlarını basılı tutmasını bekleyen kullanıcılar onKeyDown() etkinliği belirler ve tekrarlanan onKeyDown etkinliklerini kendileri işler.

Klavye desteği sağlama hakkında daha fazla bilgi için bkz. Klavye işlemlerini işleme.

Kısayollar

Donanım kullanılırken yaygın olarak kullanılan Ctrl, Alt ve Üst Karakter tabanlı kısayollar beklenir klavye kısayollarını da kullanabilirsiniz. Uygulama bunları yapmazsa deneyim can sıkıcı olabilir. İleri düzey kullanıcılar, sık sık iletişim kurduğunuzda uygulamaya özel görevleri kullandı. Kısayollar, uygulamanın daha kolay kullanılmasını ve ayırt edilmesini sağlar bu adımları uygulayabilirsiniz.

Ctrl + S (kaydet), Ctrl + Z (geri al) ve Ctrl + ÜstKrktr + Z (yeniden yap). Daha gelişmiş bazı kısayollar örneği için bkz. dönüşüm hunisinin VLC Media Player kısayol tuşları.

Kısayollar dispatchKeyShortcutEvent(). Bu, belirli bir öğe için tüm meta tuş kombinasyonlarını (Alt, Ctrl ve Üst Karakter) keser anahtar koduna sahip olur. Belirli bir meta anahtarı kontrol etmek için KeyEvent.isCtrlPressed() KeyEvent.isShiftPressed(), KeyEvent.isAltPressed(), veya KeyEvent.hasModifiers()

Kısayol kodunu diğer tuş vuruşu işlemlerinden (ör. onKeyUp()) ayırma ve onKeyDown()), kod bakımını kolaylaştırabilir ve varsayılan meta anahtar kontrollerini manuel olarak uygulamak zorunda kalmadan meta anahtarları kabul etmenizi dikkate almanız gerekir. Tüm meta anahtar kombinasyonlarına izin vermek yeni klavye düzenlerine ve işletim sistemlerine alışkın olan kullanıcılara ulaşabilirsiniz.

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);
}

Ayrıca, kontrol ederek onKeyUp() kısayolları da uygulayabilirsiniz: KeyEvent.isCtrlPressed(), KeyEvent.isShiftPressed(), veya KeyEvent.isAltPressed() olduğu gibi değiştirebilirsiniz. Bu yöntemin sürdürülmesi daha kolay meta davranışı, kısayoldan çok uygulama davranışında yapılan bir değişikliktir. Örneğin, W "ileri doğru yürü" anlamına geldiğinde ve Üst Karakter + W "ileri doğru koş" anlamına gelir.

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ı ise bunu Dokunmatik ekran girişi. Bazı cihazlarda USB veya Bluetooth çizimi de olabilir örneğin Wacom Intuos. Android uygulamaları Bluetooth girişi alabilir, ancak USB girişiyle çalışmaz.

Ekran kalemi etkinliği, dokunmatik ekran etkinliği olarak View.onTouchEvent() veya View.onGenericMotionEvent(), ve bir MotionEvent.getSource() türü SOURCE_STYLUS

MotionEvent, ek veriler de içerecek:

Geçmiş puanlar

Android, giriş etkinliklerini toplu hale getirir ve kare başına bir kez gönderir. Ekran kalemi bu rapor etkinlikleri ekrandan çok daha sık olarak raporlayabilir. Oluştururken yakın zamanda gerçekleşmiş olabilecek etkinlikleri kontrol etmek getHistorical API'lerini kullanarak geri bildirim gönderebilirsiniz:

  • MotionEvent.getHistoricalX()
  • MotionEvent.getHistoricalY()
  • MotionEvent.getHistoricalPressure()
  • MotionEvent.getHistoricalAxisValue()

Avuç içi reddi

Kullanıcılar ekran kalemi kullanarak çizerken, yazarken veya uygulamanızla etkileşime geçerken bazen ekrana avuç içiyle dokunun. Dokunma etkinliği ( ACTION_DOWN veya ACTION_POINTER_DOWN) sistem, bildirimi tanımadan ve dikkate almadan önce uygulamanıza bildirilebilir. yanlışlıkla avuç içine dokunma.

Android, avuç içi dokunma etkinliklerini iptal etmek için MotionEvent. Uygulamanız ACTION_CANCEL, hareketi yapın. Uygulamanız ACTION_POINTER_UP şu olup olmadığını kontrol et: FLAG_CANCELED ayarlandı. Eğer Bu nedenle hareketi iptal edin.

Yalnızca FLAG_CANCELED için kontrol etmeyin. Android 13 itibarıyla kolaylık olması açısından sistem ACTION_CANCEL etkinlikleri için FLAG_CANCELED özelliğini ayarlar, ancak önceki sürümler lütfen unutmayın.

Android 12

Android 12 (API düzeyi 32) ve önceki sürümlerde avuç içi reddi algılanabilir yalnızca tek noktalı dokunma etkinliklerinde kullanılabilir. İşaretçi yalnızca avuç içi dokunuşuysa sistem, hareket etkinliği nesnesine ACTION_CANCEL ayarlayarak etkinliği iptal eder. Diğer işaretçiler çalışmadığında sistem, ACTION_POINTER_UP değerini ayarlar. avuç içi reddinin algılanması için yeterli değil.

Android 13

Android 13 (API düzeyi 33) ve sonraki sürümlerde sadece işaretçi olarak avuç içi dokunması varsa sistem, şurada ACTION_CANCEL ve FLAG_CANCELED ayarlarını yaparak etkinliği iptal eder: hareket etkinliği nesnesini oluşturur. Diğer işaretçiler hatalıysa sistem, ACTION_POINTER_UP ve FLAG_CANCELED.

Uygulamanız ACTION_POINTER_UP ile hareket etkinliği aldığında, FLAG_CANCELED etkinliğinin, avuç içi reddini gösterip göstermediğini (veya başka bir etkinliğin iptali için).

Not alma uygulamaları

ChromeOS, kayıtlı not alma uygulamalarını kullanıma sunan özel bir amaca sahiptir. yardımcı olur. Bir uygulamayı not alma uygulaması olarak kaydetmek için, aşağıdaki kodu Android manifesti:

<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 uygulamasını indirin. Yeni bir not istendiğinde, uygulama hazır boş bir not oluşturmalıdır (ekran kalemi girişi için). Kullanıcı bir resme ek açıklama eklemek istediğinde (ör. ekran görüntüsü veya indirilmiş bir resim), uygulama şunu içeren ClipData ile başlatılır: content:// URI içeren bir veya daha fazla öğe. Uygulamanın, aşağıdaki bilgileri içeren bir not oluşturması gerekir: ilk eklenen resmi arka plan resmi olarak kullanır ve Kullanıcı ekran kalemiyle ekranda çizim yapabilir.

Not alma amaçlarını ekran kalemi olmadan test edin

Bir uygulamanın, etkin bir uygulama olmadan not alma amaçlarına doğru yanıt verip vermediğini test etmek ekran kalemiyse, aşağıdaki yöntemi kullanarak not alma seçeneklerini ChromeOS:

  1. Geliştirici moduna geçin ve cihazı yazılabilir hale getirin
  2. Bir terminal açmak için Ctrl + Alt + F2 tuşlarına basın
  3. sudo vi /etc/chrome_dev.conf komutunu çalıştırın
  4. --ash-enable-palette öğesini düzenlemek ve sondaki yeni bir satıra eklemek için i tuşlarına basın dosyanın
  5. Esc tuşuna basıp :, w, q yazıp Enter tuşuna basarak kaydedin
  6. Normal ChromeOS kullanıcı arayüzüne dönmek için Ctrl + Alt + F1 tuşlarına basın.
  7. Çı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. Açılış boş bir çizim notu.
  • Ekran görüntüsü alın. Rafta ekran kalemi düğmesi > Ekran görüntüsü al veya bir resim indirin. "Resimlere ek açıklama ekle" seçeneği olacaktır. bildirimi görürsünüz. Resim hazır olarak başlatılacaktır. şeklinde olur.

Fare ve dokunmatik alan desteği

Çoğu uygulamanın genellikle yalnızca üç büyük ekran merkezli olması gerekir etkinlikler: right-click, hover ve sürükleyip bırakın.

Sağ tıklama

Uygulamanın içerik menüsü göstermesine neden olan tüm işlemler (ör. dokunma ve CANNOT TRANSLATE sağ tıklama etkinliklerine de tepki vermesi gerekir. Sağ tıklamayı işlemek için bir etkinlik olduğunda, uygulamalar bir View.OnContextClickListener. Bağlam menüsü oluşturmayla ilgili ayrıntılar için bkz. Bağlamsal Menüler Oluşturma.

Kotlin

yourView.setOnContextClickListener {
  showContextMenu()
  true
}

Java

yourView.setOnContextClickListener(v -> {
    showContextMenu();
    return true;
});

İmleçle üzerine gelin

Geliştiriciler, uygulama düzenlerinin şık ve kolay bir şekilde kullanılmasını sağlayabilir. üzerine gelin. Bu durum özellikle özel görünümler için geçerlidir. En önemli iki Bunun yaygın örnekleri şunlardır:

  • Bir öğenin etkileşimli davranışı (ör. Fare işaretçisi simgesi değiştirilerek tıklanabilir veya düzenlenebilir
  • İmlecin bulunduğu sırada büyük bir liste veya ızgaradaki öğelere görsel geri bildirim ekleme imleçle üzerine gelin

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ükleme ve bırakma

Çok pencereli bir ortamda, kullanıcılar öğeleri sürükleyip bırakabilmeyi bekler yardımcı olur. Bu durum, tabletlerin, telefonların ve katlanabilir cihazlar da kullanılabilir.

Geliştiriciler, kullanıcıların öğeleri ana sayfalarında uygulamasını indirin. Sık karşılaşılan bazı örnekler: ses çalarların ses dosyaları ve çizim dosyaları almak için programın fotoğrafları almayı beklemesi beklenir.

Sürükleyip bırakma desteği eklemek için Android Dokümanları sürükle ve bırak ile göz atma burada ChromeOS blog yayını

ChromeOS ile ilgili özel noktalar

  • Erişim için requestDragAndDropPermissions üzerinden izin istemeyi unutmayın uygulamanın dışından sürüklenen öğeler
  • Bir öğenin sürüklenebilmesi için View.DRAG_FLAG_GLOBAL işaretinin olması gerekir ve onları başka uygulamalara

Gelişmiş işaretçi desteği

Fare ve dokunmatik alan girişini gelişmiş şekilde işleyen uygulamalar Şunun için Android dokümanları: View.onGenericMotionEvent() ve MotionEvent.getSource() birbirinden farklı SOURCE_MOUSE ve SOURCE_TOUCHSCREEN

Gerekli davranışı uygulamak için MotionEvent inceleyin:

  • Hareket ACTION_HOVER_MOVE etkinlik oluşturur.
  • Düğmeler ACTION_BUTTON_PRESS ve ACTION_BUTTON_RELEASE etkinlikleri oluşturur. Ayrıca tüm fare/dokunmatik alan düğmelerinin mevcut durumunu kontrol etmek için getButtonState()
  • 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 işlemleri yapmak için standart Android oyun kumandası API'lerini kullanmalıdır. (Oyun kumandalarını destekleme bölümünü inceleyin)

Düğmeler, ortak bir eşleme sonrasında ortak değerlerle eşlenir. Maalesef tüm oyun kumandası üreticileri aynı eşleme kurallarını uygulamaz. Kullanıcılara farklı seçenekler arasından seçim yapma olanağı tanıyarak çok daha iyi bir deneyim en çok kullanılan kumanda eşlemeleridir. Görüntüleyin Oyun kumandası düğmesine basılan düğmeleri işle konulu videomuzu izleyin.

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. Birkaç örnek dokunmatik alanda iki parmakla kaydırmanın, farenin otomatik olarak etkinleştirilmesini tekerlek kaydırmayı ve ham görüntüleme koordinatlarını pencere koordinatlarına eşleme. Genellikle uygulama geliştiricilerin bu davranışlardan hiçbirini uygulamaları gerekmez. .

Bir uygulama, özel giriş davranışı uygularsa (örneğin, özel bir iki parmakla dokunmatik yüzeyde sıkıştırma işlemi veya bu giriş çevirileri uygulama tarafından beklenen giriş etkinliklerini görürseniz giriş çevirisini devre dışı bırakabilirsiniz modunu açmak için aşağıdaki etiketi Android manifest'e ekleyin:

<uses-feature
    android:name="android.hardware.type.pc"
    android:required="false" />

Ek kaynaklar

ziyaret edin. ziyaret edin.