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

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

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

कीबोर्ड

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

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

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

var color by remember { mutableStateOf(Green) }
Box(
    Modifier
        .background(color)
        .onFocusChanged { color = if (it.isFocused) Blue else Green }
        .focusable()
) {
    Text("Focusable 1")
}

ज़्यादा जानकारी के लिए, कंपोज़ेबल को फ़ोकस करने लायक बनाना लेख पढ़ें.

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

हालांकि, Compose हमेशा टैब और सूचियों जैसे जटिल कंपोज़ेबल के लिए, टैब वाले नेविगेशन के लिए सही अगला आइटम तय नहीं करता. उदाहरण के लिए, जब कोई कंपोज़ेबल, हॉरिज़ॉन्टल स्क्रोल किया जा सकने वाला ऐसा आइटम हो जो पूरी तरह से न दिखता हो.

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

Row {
    Column(Modifier.focusGroup()) {
        Button({}) { Text("Row1 Col1") }
        Button({}) { Text("Row2 Col1") }
        Button({}) { Text("Row3 Col1") }
    }
    Column(Modifier.focusGroup()) {
        Button({}) { Text("Row1 Col2") }
        Button({}) { Text("Row2 Col2") }
        Button({}) { Text("Row3 Col2") }
    }
}

ज़्यादा जानकारी के लिए, फ़ोकस ग्रुप की मदद से, एक जैसा नेविगेशन उपलब्ध कराना लेख पढ़ें.

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

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

कीस्ट्रोक

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

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

onKeyEvent मॉडिफ़ायर की मदद से, अलग-अलग कीस्ट्रोक को मैनेज किया जा सकता है. यह मॉडिफ़ायर, लैम्ब्डा को स्वीकार करता है. इसे तब कॉल किया जाता है, जब बदले गए कॉम्पोनेंट को कोई की इवेंट मिलता है. KeyEvent#type प्रॉपर्टी की मदद से, यह तय किया जा सकता है कि इवेंट, बटन दबाने (KeyDown) से जुड़ा है या बटन छोड़ने (KeyUp) से:

Box(
    modifier = Modifier.focusable().onKeyEvent {
        if(
            it.type == KeyEventType.KeyUp &&
            it.key == Key.S
        ) {
            doSomething()
            true
        } else {
            false
        }
    }
)  {
    Text("Press S key")
}

इसके अलावा, onKeyUp() कॉलबैक को बदला जा सकता है. साथ ही, मिले हर कीकोड के लिए, उम्मीद के मुताबिक व्यवहार जोड़ा जा सकता है:

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

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

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

शॉर्टकट

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

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

KeyEvent ऑब्जेक्ट में ये एट्रिब्यूट होते हैं. इनसे पता चलता है कि कार्रवाई बदलने वाली कुंजियां दबाई गई हैं या नहीं:

उदाहरण के लिए:

Box(
    Modifier.onKeyEvent {
        if (it.isAltPressed && it.key == Key.A) {
            println("Alt + A is pressed")
            true
        } else {
            false
        }
    }
    .focusable()
)

ज़्यादा जानकारी के लिए, ये लेख पढ़ें:

स्टाइलस

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

स्टाइलस MotionEvent ऑब्जेक्ट ऐक्सेस करने के लिए, ड्रॉइंग सरफ़ेस में pointerInteropFilter मॉडिफ़ायर जोड़ें. ViewModel क्लास को ऐसे तरीके के साथ लागू करें जो मोशन इवेंट को प्रोसेस करता हो. इस तरीके को pointerInteropFilter मॉडिफ़ायर के onTouchEvent लैम्ब्डा के तौर पर पास करें:

@Composable
@OptIn(ExperimentalComposeUiApi::class)
fun DrawArea(modifier: Modifier = Modifier) {
   Canvas(modifier = modifier
       .clipToBounds()
       .pointerInteropFilter {
           viewModel.processMotionEvent(it)
       }

   ) {
       // Drawing code here.
   }
}

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

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

ऐतिहासिक जगहें

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. बदलाव करने के लिए i दबाएं और फ़ाइल के आखिर में नई लाइन में --ash-enable-palette जोड़ें
  5. सेव करने के लिए, Esc दबाएं. इसके बाद, :, w, q टाइप करें और Enter दबाएं
  6. सामान्य ChromeOS यूज़र इंटरफ़ेस (यूआई) पर वापस जाने के लिए, Ctrl+Alt+F1 दबाएं
  7. लॉग आउट करके, फिर से लॉग इन करना

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

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

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

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

राइट-क्लिक करना

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

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

Box(modifier = Modifier.fillMaxSize()) {
    AndroidView(
        modifier = Modifier.fillMaxSize(),
        factory = { context ->
            val rootView = FrameLayout(context)
            val onContextClickListener =
                View.OnContextClickListener { view ->
                    showContextMenu()
                    true
                }
            rootView.setOnContextClickListener(onContextClickListener)
            rootView
        },
    )
}

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

होवर

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

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

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

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

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

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

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

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

पॉइंटर के लिए बेहतर सहायता

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

@Composable
private fun LogPointerEvents(filter: PointerEventType? = null) {
    var log by remember { mutableStateOf("") }
    Column {
        Text(log)
        Box(
            Modifier
                .size(100.dp)
                .background(Color.Red)
                .pointerInput(filter) {
                    awaitPointerEventScope {
                        while (true) {
                            val event = awaitPointerEvent()
                            // handle pointer event
                            if (filter == null || event.type == filter) {
                                log = "${event.type}, ${event.changes.first().position}"
                            }
                        }
                    }
                }
        )
    }
}

PointerEvent ऑब्जेक्ट की जांच करके, इन बातों का पता लगाएं:

  • PointerType: माउस, स्टाइलस, टच वगैरह, PointerEvent#changes से
  • PointerEventType: पॉइंटर से की जाने वाली कार्रवाइयां, जैसे कि दबाना, मूव करना, स्क्रोल करना, और रिलीज़ करना

गेम कंट्रोलर

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

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

इनपुट अनुवाद मोड

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

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

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

अन्य संसाधन