बड़ी स्क्रीन पर इनपुट की सुविधा काम करती है

बड़ी स्क्रीन वाले डिवाइसों पर, उपयोगकर्ता अक्सर कीबोर्ड, माउस, ट्रैकपैड, स्टाइलस या गेमपैड का इस्तेमाल करके ऐप्लिकेशन से इंटरैक्ट करते हैं. अपने ऐप्लिकेशन को बाहरी डिवाइसों से इनपुट स्वीकार करने की अनुमति देने के लिए, यह तरीका अपनाएं:

  • कीबोर्ड के बुनियादी फ़ंक्शन की जांच करें. जैसे, Ctrl+Z से किए गए बदलाव को वापस लाना, Ctrl+C से कॉपी करना, और Ctrl+S से सेव करना. कीबोर्ड के डिफ़ॉल्ट शॉर्टकट की सूची देखने के लिए, कीबोर्ड की कार्रवाइयों को मैनेज करना लेख पढ़ें.
  • कीबोर्ड की बेहतर सुविधाओं को आज़माएं. उदाहरण के लिए, Tab बटन और ऐरो बटन का इस्तेमाल करके कीबोर्ड से नेविगेट करना, Enter बटन का इस्तेमाल करके टेक्स्ट डालने की पुष्टि करना, और मीडिया ऐप्लिकेशन में Spacebar का इस्तेमाल करके वीडियो को चलाना और रोकना.
  • माउस के बुनियादी इंटरैक्शन की जांच करें. जैसे, कॉन्टेक्स्ट मेन्यू के लिए राइट क्लिक करना, कर्सर घुमाने पर आइकॉन में बदलाव होना, और कस्टम कॉम्पोनेंट पर माउस व्हील या ट्रैकपैड स्क्रोल इवेंट.
  • स्टाइलस, गेम कंट्रोलर, और संगीत ऐप्लिकेशन के एमआईडीआई कंट्रोलर जैसे ऐप्लिकेशन के हिसाब से इनपुट डिवाइसों की जांच करें.
  • बेहतर इनपुट डिवाइसों के साथ काम करने की सुविधा जोड़ें. इससे डेस्कटॉप एनवायरमेंट में आपका ऐप्लिकेशन सबसे अलग दिखेगा. उदाहरण के लिए, डीजे ऐप्लिकेशन के लिए क्रॉस‑फ़ेडर के तौर पर टचपैड, गेम के लिए माउस कैप्चर करने की सुविधा, और कीबोर्ड का इस्तेमाल करने वाले लोगों के लिए कीबोर्ड शॉर्टकट.

कीबोर्ड

कीबोर्ड से दिए गए इनपुट पर आपका ऐप्लिकेशन किस तरह से काम करता है, इससे बड़ी स्क्रीन पर ऐप्लिकेशन इस्तेमाल करने वाले लोगों को मिलने वाले अनुभव पर असर पड़ता है. कीबोर्ड से तीन तरह के इनपुट दिए जा सकते हैं: नेविगेशन, कीस्ट्रोक, और शॉर्टकट.

टचस्क्रीन वाले ऐप्लिकेशन में कीबोर्ड से नेविगेट करने की सुविधा बहुत कम लागू की जाती है. हालांकि, जब उपयोगकर्ता किसी ऐप्लिकेशन का इस्तेमाल कर रहे होते हैं और उनके हाथ कीबोर्ड पर होते हैं, तो वे इस सुविधा की उम्मीद करते हैं. सुलभता से जुड़ी ज़रूरतों वाले लोगों के लिए, फ़ोन, टैबलेट, फ़ोल्ड किए जा सकने वाले डिवाइसों, और डेस्कटॉप डिवाइसों पर कीबोर्ड नेविगेशन ज़रूरी हो सकता है.

कई ऐप्लिकेशन के लिए, ऐरो की और टैब नेविगेशन को Android फ़्रेमवर्क अपने-आप मैनेज करता है. उदाहरण के लिए, Button को डिफ़ॉल्ट रूप से फ़ोकस किया जा सकता है. साथ ही, कीबोर्ड नेविगेशन को आम तौर पर किसी अतिरिक्त कोड के बिना काम करना चाहिए. डिफ़ॉल्ट रूप से फ़ोकस नहीं किए जा सकने वाले व्यू के लिए, कीबोर्ड नेविगेशन चालू करने के लिए, उन्हें फ़ोकस किए जा सकने वाले व्यू के तौर पर मार्क करें. ऐसा प्रोग्राम के हिसाब से या XML में किया जा सकता है:

Kotlin

yourView.isFocusable = true

Java

yourView.setFocusable(true);

इसके अलावा, लेआउट फ़ाइल में focusable एट्रिब्यूट सेट किया जा सकता है:

android:focusable="true"

ज़्यादा जानने के लिए, फ़ोकस हैंडलिंग देखें.

फ़ोकस चालू होने पर, Android फ़्रेमवर्क, फ़ोकस किए जा सकने वाले सभी व्यू के लिए नेविगेशनल मैपिंग बनाता है. यह मैपिंग, उनकी पोज़िशन के आधार पर बनाई जाती है. आम तौर पर, यह सुविधा ठीक से काम करती है और इसमें आगे कोई बदलाव करने की ज़रूरत नहीं होती. अगर किसी ऐप्लिकेशन की ज़रूरतों के हिसाब से डिफ़ॉल्ट मैपिंग सही नहीं है, तो मैपिंग को इस तरह से बदला जा सकता है:

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

सिर्फ़ कीबोर्ड का इस्तेमाल करके, अपने ऐप्लिकेशन के हर यूज़र इंटरफ़ेस (यूआई) एलिमेंट को ऐक्सेस करने की सुविधा की जांच करें. अक्सर इस्तेमाल किए जाने वाले एलिमेंट को माउस या टच इनपुट के बिना ऐक्सेस किया जा सकता हो.

याद रखें कि सुलभता से जुड़ी ज़रूरतों वाले लोगों के लिए, कीबोर्ड का इस्तेमाल करना ज़रूरी हो सकता है.

कीस्ट्रोक

टेक्स्ट इनपुट के लिए, ऑन स्क्रीन वर्चुअल कीबोर्ड (IME) का इस्तेमाल किया जाता है. जैसे,EditText. ऐसे में, ऐप्लिकेशन को बड़ी स्क्रीन वाले डिवाइसों पर उम्मीद के मुताबिक काम करना चाहिए. इसके लिए, डेवलपर को कोई अतिरिक्त काम नहीं करना चाहिए. फ़्रेमवर्क जिन कीस्ट्रोक का अनुमान नहीं लगा सकता उनके लिए, ऐप्लिकेशन को खुद ही यह तय करना होगा कि उन्हें कैसे हैंडल करना है. यह खास तौर पर कस्टम व्यू वाले ऐप्लिकेशन के लिए सही है.

उदाहरण के लिए, चैट ऐप्लिकेशन में मैसेज भेजने के लिए Enter बटन का इस्तेमाल किया जाता है. मीडिया ऐप्लिकेशन में, Spacebar बटन से मीडिया को चलाया और रोका जाता है. गेम में, w, a, s, और d बटन से मूवमेंट को कंट्रोल किया जाता है.

ज़्यादातर ऐप्लिकेशन, onKeyUp() कॉलबैक को बदल देते हैं और मिले हुए हर कीकोड के लिए, उम्मीद के मुताबिक व्यवहार जोड़ देते हैं:

Kotlin

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

जब कोई कुंजी छोड़ी जाती है, तब onKeyUp इवेंट होता है. कॉल बैक का इस्तेमाल करने से, ऐप्लिकेशन को कई onKeyDown इवेंट प्रोसेस करने की ज़रूरत नहीं पड़ती. ऐसा तब होता है, जब कोई बटन दबाकर रखा जाता है या उसे धीरे-धीरे छोड़ा जाता है. जिन गेम और ऐप्लिकेशन को यह पता लगाना होता है कि कोई बटन कब दबाया गया या उपयोगकर्ता ने किसी बटन को दबाकर रखा है या नहीं वे onKeyDown इवेंट को सुन सकते हैं. साथ ही, बार-बार होने वाले onKeyDown इवेंट को खुद मैनेज कर सकते हैं.

ज़्यादा जानकारी के लिए, कीबोर्ड की कार्रवाइयों को मैनेज करना लेख पढ़ें.

शॉर्टकट

हार्डवेयर कीबोर्ड का इस्तेमाल करते समय, Ctrl, Alt, Shift, और Meta कुंजियों वाले सामान्य कीबोर्ड शॉर्टकट काम करते हैं. अगर कोई ऐप्लिकेशन शॉर्टकट लागू नहीं करता है, तो उपयोगकर्ताओं को खराब अनुभव मिल सकता है. एडवांस उपयोगकर्ताओं को, ऐप्लिकेशन से जुड़े अक्सर इस्तेमाल किए जाने वाले टास्क के लिए शॉर्टकट भी पसंद आते हैं. शॉर्टकट की मदद से, किसी ऐप्लिकेशन को इस्तेमाल करना आसान हो जाता है. साथ ही, इससे ऐप्लिकेशन को उन ऐप्लिकेशन से अलग करने में मदद मिलती है जिनमें शॉर्टकट नहीं होते.

कुछ सामान्य शॉर्टकट में Ctrl+S (सेव करें), Ctrl+Z (पहले जैसा करें), और Ctrl+Shift+Z (फिर से करें) शामिल हैं. डिफ़ॉल्ट शॉर्टकट की सूची देखने के लिए, कीबोर्ड से होने वाली कार्रवाइयों को मैनेज करना लेख पढ़ें.

शॉर्टकट चालू करने के लिए, dispatchKeyShortcutEvent() को लागू किया जा सकता है. इससे किसी दिए गए कीकोड के लिए, बटन के सभी कॉम्बिनेशन (Alt, Ctrl, Shift, और Meta) को इंटरसेप्ट किया जा सकता है. किसी खास मॉडिफ़ायर कुंजी की जांच करने के लिए, इसका इस्तेमाल करें:

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

शॉर्टकट कोड को कीस्ट्रोक हैंडलिंग (जैसे कि onKeyUp() और onKeyDown()) से अलग करने पर, डिफ़ॉल्ट रूप से मॉडिफ़ायर कुंजियां स्वीकार की जाती हैं. इसके लिए, हर मामले में मॉडिफ़ायर कुंजी की जांच को मैन्युअल तरीके से लागू करने की ज़रूरत नहीं होती. सभी मॉडिफ़ायर की कॉम्बिनेशन को अनुमति देने से, उन लोगों को भी ज़्यादा आसानी हो सकती है जो अलग-अलग कीबोर्ड लेआउट और ऑपरेटिंग सिस्टम के आदी हैं.

हालांकि, onKeyUp() में शॉर्टकट लागू करने के लिए, KeyEvent.isCtrlPressed(), KeyEvent.isShiftPressed() या KeyEvent.isAltPressed() की जांच की जा सकती है. अगर बदली गई कुंजी का व्यवहार, शॉर्टकट के बजाय ऐप्लिकेशन के व्यवहार में ज़्यादा बदलाव करता है, तो इसे बनाए रखना आसान हो सकता है. उदाहरण के लिए, गेम में W का मतलब "आगे की ओर चलना" और Shift+W का मतलब "आगे की ओर दौड़ना" होता है.

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

कीबोर्ड शॉर्टकट सहायक के बारे में भी जानें.

स्टाइलस

बड़ी स्क्रीन वाले कई डिवाइसों में स्टाइलस होता है. Android ऐप्लिकेशन, स्टाइलस को टचस्क्रीन इनपुट के तौर पर हैंडल करते हैं. कुछ डिवाइसों में यूएसबी या ब्लूटूथ ड्राइंग टेबल भी हो सकती है. जैसे, Wacom Intuos. Android ऐप्लिकेशन, ब्लूटूथ इनपुट पा सकते हैं, लेकिन यूएसबी इनपुट नहीं.

स्टाइलस इवेंट को View#onTouchEvent() या View#onGenericMotionEvent(), टचस्क्रीन इवेंट के तौर पर रिपोर्ट करता है. साथ ही, इसमें SOURCE_STYLUS टाइप का MotionEvent#getSource() शामिल होता है.

MotionEvent ऑब्जेक्ट में इवेंट के बारे में यह जानकारी होती है:

  • MotionEvent#getToolType(), डिसप्ले से संपर्क करने वाले टूल के आधार पर TOOL_TYPE_FINGER, TOOL_TYPE_STYLUS या TOOL_TYPE_ERASER दिखाता है
  • MotionEvent#getPressure() स्टाइलस पेन पर डाले गए दबाव की जानकारी देता है. हालांकि, यह जानकारी सिर्फ़ तब मिलती है, जब डिवाइस में यह सुविधा उपलब्ध हो
  • MotionEvent.AXIS_TILT और MotionEvent.AXIS_ORIENTATION के साथ MotionEvent#getAxisValue(), स्टाइलस के झुकाव और ओरिएंटेशन की जानकारी देते हैं. हालांकि, यह जानकारी सिर्फ़ तब मिलती है, जब स्टाइलस में यह सुविधा काम करती हो

पिछले पॉइंट

Android, इनपुट इवेंट को बैच करता है और उन्हें हर फ़्रेम में एक बार डिलीवर करता है. स्टाइलस, डिसप्ले की तुलना में ज़्यादा फ़्रीक्वेंसी पर इवेंट रिपोर्ट कर सकता है. ड्राइंग ऐप्लिकेशन बनाते समय, getHistorical एपीआई का इस्तेमाल करके, हाल ही के इवेंट देखें:

हथेली को खारिज करने की सुविधा

जब उपयोगकर्ता स्टाइलस का इस्तेमाल करके आपके ऐप्लिकेशन पर ड्रॉ करते हैं, लिखते हैं या उससे इंटरैक्ट करते हैं, तब कभी-कभी वे अपनी हथेली से स्क्रीन को छू लेते हैं. ACTION_DOWN या ACTION_POINTER_DOWN पर सेट किया गया टच इवेंट, आपके ऐप्लिकेशन को तब रिपोर्ट किया जा सकता है, जब सिस्टम गलती से हथेली के टच को पहचान लेता है और उसे अनदेखा कर देता है.

Android, हथेली से टच करने के इवेंट को रद्द कर देता है. इसके लिए, वह MotionEvent भेजता है. अगर आपके ऐप्लिकेशन को ACTION_CANCEL मिलता है, तो जेस्चर रद्द करें. अगर आपके ऐप्लिकेशन को ACTION_POINTER_UP मिलता है, तो देखें कि FLAG_CANCELED सेट है या नहीं. अगर ऐसा है, तो जेस्चर रद्द करें.

सिर्फ़ FLAG_CANCELED के लिए जाँच न करें. Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन पर, सिस्टम ACTION_CANCEL इवेंट के लिए FLAG_CANCELED सेट करता है. हालांकि, सिस्टम Android के पुराने वर्शन पर फ़्लैग सेट नहीं करता है.

Android 12

Android 12 (एपीआई लेवल 32) और इससे पहले के वर्शन पर, हथेली के टच को सिर्फ़ एक‑पॉइंटर टच इवेंट के लिए पहचाना जा सकता है. अगर सिर्फ़ हथेली से टच किया गया है, तो सिस्टम मोशन इवेंट ऑब्जेक्ट पर ACTION_CANCEL सेट करके इवेंट को रद्द कर देता है. अगर अन्य पॉइंटर काम नहीं कर रहे हैं, तो सिस्टम ACTION_POINTER_UP सेट करता है. यह हथेली को खारिज करने की सुविधा का पता लगाने के लिए काफ़ी नहीं है.

Android 13

Android 13 (एपीआई लेवल 33) और इसके बाद के वर्शन पर, अगर हथेली से टच करने पर ही पॉइंटर दिखता है, तो सिस्टम इवेंट को रद्द कर देता है. इसके लिए, वह मोशन इवेंट ऑब्जेक्ट पर ACTION_CANCEL और FLAG_CANCELED सेट करता है. अगर अन्य पॉइंटर कम हैं, तो सिस्टम ACTION_POINTER_UP और FLAG_CANCELED सेट करता है.

जब भी आपके ऐप्लिकेशन को ACTION_POINTER_UP के साथ मोशन इवेंट मिलता है, तो FLAG_CANCELED की जांच करें. इससे यह पता चलेगा कि इवेंट, हथेली को खारिज करने (या इवेंट रद्द करने) का संकेत देता है या नहीं.

नोट लेने वाले ऐप्लिकेशन

ChromeOS में एक खास इंटेंट होता है. इससे उपयोगकर्ताओं को नोट लेने के लिए रजिस्टर किए गए ऐप्लिकेशन दिखते हैं. किसी ऐप्लिकेशन को नोट लेने वाले ऐप्लिकेशन के तौर पर रजिस्टर करने के लिए, अपने ऐप्लिकेशन के मेनिफ़ेस्ट में यह जानकारी जोड़ें:

<intent-filter>
    <action android:name="org.chromium.arc.intent.action.CREATE_NOTE" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

जब कोई ऐप्लिकेशन सिस्टम के साथ रजिस्टर होता है, तो उपयोगकर्ता उसे नोट लेने वाले डिफ़ॉल्ट ऐप्लिकेशन के तौर पर चुन सकता है. जब नए नोट का अनुरोध किया जाता है, तो ऐप्लिकेशन को एक खाली नोट बनाना चाहिए, ताकि स्टाइलस से इनपुट दिया जा सके. जब उपयोगकर्ता को किसी इमेज (जैसे, स्क्रीनशॉट या डाउनलोड की गई इमेज) पर एनोटेशन जोड़ना होता है, तो ऐप्लिकेशन ClipData के साथ लॉन्च होता है. इसमें content:// यूआरआई वाले एक या उससे ज़्यादा आइटम होते हैं. ऐप्लिकेशन को एक नोट बनाना चाहिए. इसमें पहली अटैच की गई इमेज को बैकग्राउंड इमेज के तौर पर इस्तेमाल किया जाना चाहिए. साथ ही, ऐप्लिकेशन को ऐसे मोड में होना चाहिए जहां उपयोगकर्ता स्टाइलस से स्क्रीन पर ड्रॉ कर सके.

स्टाइलस के बिना नोट लेने के इंटेंट की जांच करना

यह जांच करने के लिए कि कोई ऐप्लिकेशन, स्टाइलस के बिना नोट लेने के इरादे से किए गए अनुरोधों का सही जवाब देता है या नहीं, ChromeOS पर नोट लेने के विकल्प दिखाने के लिए यह तरीका अपनाएं:

  1. डेवलपर मोड पर स्विच करना और डिवाइस को लिखने लायक बनाना
  2. टर्मिनल खोलने के लिए, Ctrl+Alt+F2 दबाएं
  3. sudo vi /etc/chrome_dev.conf कमांड चलाएं
  4. फ़ाइल के आखिर में नई लाइन में --ash-enable-palette जोड़ने के लिए, i दबाएं
  5. सेव करने के लिए, Esc दबाएं. इसके बाद, :, w, q टाइप करें और Enter दबाएं
  6. ChromeOS के सामान्य यूज़र इंटरफ़ेस (यूआई) पर वापस जाने के लिए, Ctrl+Alt+F1 दबाएं
  7. लॉग आउट करें और फिर से लॉग इन करें

अब शेल्फ़ पर स्टाइलस मेन्यू दिखना चाहिए:

  • शेल्फ़ पर मौजूद स्टाइलस बटन पर टैप करें और नया नोट चुनें. इससे एक खाली ड्रॉइंग नोट खुलना चाहिए.
  • कोई स्क्रीनशॉट लें. शेल्फ़ से, स्टाइलस बटन > स्क्रीन कैप्चर करें चुनें या कोई इमेज डाउनलोड करें. सूचना में, इमेज की व्याख्या करें का विकल्प होना चाहिए. इससे ऐप्लिकेशन लॉन्च हो जाएगा और इमेज एनोटेट करने के लिए तैयार हो जाएगी.

माउस और टचपैड की सुविधा

ज़्यादातर ऐप्लिकेशन को आम तौर पर, बड़ी स्क्रीन के हिसाब से सिर्फ़ तीन इवेंट हैंडल करने होते हैं: राइट-क्लिक करें, होवर करें, और खींचें और छोड़ें.

राइट क्लिक करें

ऐसी सभी कार्रवाइयों के लिए राइट‑क्लिक इवेंट काम करने चाहिए जिनकी वजह से कोई ऐप्लिकेशन कॉन्टेक्स्ट मेन्यू दिखाता है. जैसे, किसी सूची आइटम को दबाकर रखना.

दाएं क्लिक वाले इवेंट को हैंडल करने के लिए, ऐप्लिकेशन को View.OnContextClickListener रजिस्टर करना चाहिए:

Kotlin

yourView.setOnContextClickListener {
    showContextMenu()
    true
}

Java

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

कॉन्टेक्स्ट मेन्यू बनाने के बारे में जानकारी के लिए, कॉन्टेक्स्ट मेन्यू बनाना लेख पढ़ें.

होवर

होवर इवेंट को मैनेज करके, अपने ऐप्लिकेशन के लेआउट को बेहतर और इस्तेमाल करने में आसान बनाया जा सकता है. यह खास तौर पर, कस्टम व्यू:

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)
    true // Listener consumes the event.
}

Java

// Change the icon to a "hand" pointer on hover.
// Highlight the view by changing the background.
yourView.setOnHoverListener((view, event) -> {
    addVisualHighlighting(true);
    view.setPointerIcon(
        PointerIcon.getSystemIcon(view.getContext(), PointerIcon.TYPE_HAND)
    );
    return true; // Listener consumes the event.
});

इसके दो सबसे सामान्य उदाहरण ये हैं:

  • माउस पॉइंटर के आइकॉन को बदलकर, उपयोगकर्ताओं को यह बताना कि किसी एलिमेंट में इंटरैक्टिव व्यवहार है या नहीं. जैसे, क्लिक किया जा सकता है या बदलाव किया जा सकता है
  • जब पॉइंटर को किसी बड़ी सूची या ग्रिड में मौजूद आइटम पर घुमाया जाता है, तो उनमें विज़ुअल फ़ीडबैक जोड़ना

खींचना और छोड़ना

मल्टी-विंडो एनवायरमेंट में, उपयोगकर्ता चाहते हैं कि वे एक ऐप्लिकेशन से दूसरे ऐप्लिकेशन में आइटम को खींचकर छोड़ सकें. यह बात डेस्कटॉप डिवाइसों के साथ-साथ, स्प्लिट स्क्रीन मोड में टैबलेट, फ़ोन, और फ़ोल्ड किए जा सकने वाले डिवाइसों पर भी लागू होती है.

देखें कि क्या उपयोगकर्ता, आइटम को आपके ऐप्लिकेशन में खींचकर ला सकते हैं. उदाहरण के लिए, फ़ोटो एडिटर को फ़ोटो मिलने की उम्मीद होनी चाहिए, ऑडियो प्लेयर को ऑडियो फ़ाइलें मिलने की उम्मीद होनी चाहिए, और ड्राइंग प्रोग्राम को फ़ोटो मिलने की उम्मीद होनी चाहिए.

ड्रैग और ड्रॉप करने की सुविधा जोड़ने के लिए, ड्रैग और ड्रॉप करने की सुविधा चालू करना देखें. साथ ही, ChromeOS पर Android — ड्रैग और ड्रॉप करने की सुविधा लागू करना ब्लॉग पोस्ट पढ़ें.

ChromeOS के लिए खास बातें

  • ऐप्लिकेशन से बाहर से ड्रैग किए गए आइटम को ऐक्सेस करने के लिए, requestDragAndDropPermissions() से अनुमति का अनुरोध करना न भूलें
  • किसी आइटम को खींचकर दूसरे ऐप्लिकेशन में छोड़ने के लिए, उस पर View.DRAG_FLAG_GLOBAL फ़्लैग लगा होना चाहिए

पॉइंटर के लिए ऐडवांस सपोर्ट

माउस और टचपैड के इनपुट को बेहतर तरीके से हैंडल करने वाले ऐप्लिकेशन को View#onGenericMotionEvent() और SOURCE_MOUSE और SOURCE_TOUCHSCREEN के बीच अंतर करने के लिए [MotionEvent.getSource()][] का इस्तेमाल करें.

ज़रूरत के मुताबिक व्यवहार लागू करने के लिए, MotionEvent ऑब्जेक्ट की जांच करें:

  • मूवमेंट से ACTION_HOVER_MOVE इवेंट जनरेट होते हैं.
  • बटन, ACTION_BUTTON_PRESS और ACTION_BUTTON_RELEASE इवेंट जनरेट करते हैं. getButtonState() का इस्तेमाल करके, माउस और ट्रैकपैड के सभी बटन की मौजूदा स्थिति भी देखी जा सकती है.
  • माउस व्हील से स्क्रोल करने पर, ACTION_SCROLL इवेंट जनरेट होते हैं.

गेम कंट्रोलर

कुछ बड़ी स्क्रीन वाले Android डिवाइसों पर, चार गेम कंट्रोलर इस्तेमाल किए जा सकते हैं. गेम कंट्रोलर को मैनेज करने के लिए, स्टैंडर्ड Android गेम कंट्रोलर एपीआई का इस्तेमाल करें. इसके बारे में जानने के लिए, गेम कंट्रोलर के साथ काम करने की सुविधा देखें.

गेम कंट्रोलर के बटन, सामान्य मैपिंग के हिसाब से सामान्य वैल्यू पर मैप किए जाते हैं. हालांकि, गेम कंट्रोलर बनाने वाली सभी कंपनियां, बटन मैपिंग के एक जैसे नियमों का पालन नहीं करती हैं. अगर उपयोगकर्ताओं को कंट्रोलर की अलग-अलग लोकप्रिय मैपिंग चुनने की अनुमति दी जाती है, तो उन्हें बेहतर अनुभव मिल सकता है. ज़्यादा जानकारी के लिए, गेमपैड के बटन दबाने की प्रोसेस देखें.

इनपुट ट्रांसलेशन मोड

ChromeOS में, इनपुट ट्रांसलेशन मोड डिफ़ॉल्ट रूप से चालू होता है. ज़्यादातर Android ऐप्लिकेशन के लिए, यह मोड डेस्कटॉप एनवायरमेंट में ऐप्लिकेशन को उम्मीद के मुताबिक काम करने में मदद करता है. इसके कुछ उदाहरणों में, टचपैड पर दो उंगलियों से स्क्रोल करने की सुविधा अपने-आप चालू होना, माउस व्हील से स्क्रोल करना, और डिसप्ले के रॉ कोऑर्डिनेट को विंडो कोऑर्डिनेट पर मैप करना शामिल है. आम तौर पर, ऐप्लिकेशन डेवलपर को इनमें से किसी भी व्यवहार को खुद लागू करने की ज़रूरत नहीं होती.

अगर कोई ऐप्लिकेशन, इनपुट के लिए कस्टम व्यवहार लागू करता है. उदाहरण के लिए, दो उंगलियों से टचपैड को पिंच करने के लिए कस्टम ऐक्शन तय करना. इसके अलावा, अगर इनपुट ट्रांसलेशन से ऐप्लिकेशन को उम्मीद के मुताबिक इनपुट इवेंट नहीं मिलते हैं, तो Android मेनिफ़ेस्ट में यह टैग जोड़कर, इनपुट ट्रांसलेशन मोड को बंद किया जा सकता है:

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

अन्य संसाधन