बड़ी स्क्रीन वाले डिवाइसों पर, उपयोगकर्ता अक्सर कीबोर्ड, माउस, ट्रैकपैड, स्टाइलस या गेमपैड का इस्तेमाल करके ऐप्लिकेशन से इंटरैक्ट करते हैं. अपने ऐप्लिकेशन को बाहरी डिवाइसों से इनपुट स्वीकार करने की अनुमति देने के लिए, यह तरीका अपनाएं:
- कीबोर्ड के बुनियादी फ़ंक्शन की जांच करें. जैसे, 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") }
}
}
ज़्यादा जानकारी के लिए, फ़ोकस ग्रुप की मदद से, एक जैसी नेविगेशन सुविधा उपलब्ध कराना लेख पढ़ें.
सिर्फ़ कीबोर्ड का इस्तेमाल करके, अपने ऐप्लिकेशन के हर यूज़र इंटरफ़ेस (यूआई) एलिमेंट को ऐक्सेस करने की सुविधा की जांच करें. अक्सर इस्तेमाल किए जाने वाले एलिमेंट को माउस या टच इनपुट के बिना ऐक्सेस किया जा सकता हो.
याद रखें कि सुलभता से जुड़ी ज़रूरतों वाले लोगों के लिए, कीबोर्ड का इस्तेमाल करना ज़रूरी हो सकता है.
कीस्ट्रोक
टेक्स्ट इनपुट के लिए, ऑन स्क्रीन वर्चुअल कीबोर्ड (IME) का इस्तेमाल किया जाता है. जैसे,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.AXIS_TILTऔरMotionEvent.AXIS_ORIENTATIONके साथMotionEvent#getAxisValue(), स्टाइलस के झुकाव और ओरिएंटेशन की जानकारी देते हैं. हालांकि, यह जानकारी सिर्फ़ तब मिलती है, जब स्टाइलस में यह सुविधा काम करती हो
पिछले पॉइंट
Android, इनपुट इवेंट को बैच करता है और उन्हें हर फ़्रेम में एक बार डिलीवर करता है. स्टाइलस, डिसप्ले की तुलना में ज़्यादा फ़्रीक्वेंसी पर इवेंट रिपोर्ट कर सकता है. ड्राइंग ऐप्लिकेशन बनाते समय, getHistorical एपीआई का इस्तेमाल करके, हाल ही के इवेंट देखें:
MotionEvent#getHistoricalX()MotionEvent#getHistoricalY()MotionEvent#getHistoricalPressure()MotionEvent#getHistoricalAxisValue()
हथेली को खारिज करने की सुविधा
जब उपयोगकर्ता स्टाइलस का इस्तेमाल करके आपके ऐप्लिकेशन पर ड्रॉ करते हैं, लिखते हैं या उससे इंटरैक्ट करते हैं, तब कभी-कभी वे अपनी हथेली से स्क्रीन को छू लेते हैं. 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 पर नोट लेने के विकल्प दिखाने के लिए यह तरीका अपनाएं:
- डेवलपर मोड पर स्विच करना और डिवाइस को लिखने लायक बनाना
- टर्मिनल खोलने के लिए, Ctrl+Alt+F2 दबाएं
sudo vi /etc/chrome_dev.confकमांड चलाएं- फ़ाइल के आखिर में नई लाइन में
--ash-enable-paletteजोड़ने के लिए,iदबाएं - सेव करने के लिए, Esc दबाएं. इसके बाद, :, w, q टाइप करें और Enter दबाएं
- ChromeOS के सामान्य यूज़र इंटरफ़ेस (यूआई) पर वापस जाने के लिए, Ctrl+Alt+F1 दबाएं
- लॉग आउट करें और फिर से लॉग इन करें
अब शेल्फ़ पर स्टाइलस मेन्यू दिखना चाहिए:
- शेल्फ़ पर मौजूद स्टाइलस बटन पर टैप करें और नया नोट चुनें. इससे एक खाली ड्रॉइंग नोट खुलना चाहिए.
- कोई स्क्रीनशॉट लें. शेल्फ़ से, स्टाइलस बटन > स्क्रीन कैप्चर करें चुनें या कोई इमेज डाउनलोड करें. सूचना में, इमेज की व्याख्या करें का विकल्प होना चाहिए. इससे ऐप्लिकेशन लॉन्च हो जाएगा और इमेज एनोटेट करने के लिए तैयार हो जाएगी.
माउस और टचपैड की सुविधा
ज़्यादातर ऐप्लिकेशन को आम तौर पर, बड़ी स्क्रीन के हिसाब से सिर्फ़ तीन इवेंट हैंडल करने होते हैं: राइट-क्लिक करें, होवर करें, और खींचें और छोड़ें.
राइट क्लिक करें
ऐसी सभी कार्रवाइयों के लिए राइट‑क्लिक इवेंट काम करने चाहिए जिनकी वजह से कोई ऐप्लिकेशन कॉन्टेक्स्ट मेन्यू दिखाता है. जैसे, किसी सूची आइटम को दबाकर रखना.
दाएं क्लिक वाले इवेंट को हैंडल करने के लिए, ऐप्लिकेशन को 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 के लिए खास बातें
- ऐप्लिकेशन से बाहर से ड्रैग किए गए आइटम को ऐक्सेस करने के लिए,
requestDragAndDropPermissions()से अनुमति का अनुरोध करना न भूलें किसी आइटम को खींचकर दूसरे ऐप्लिकेशन में छोड़ने के लिए, उस पर
View.DRAG_FLAG_GLOBALफ़्लैग लगा होना चाहिएड्रैग इवेंट शुरू करना देखें
पॉइंटर के लिए ऐडवांस सपोर्ट
माउस और टचपैड के इनपुट को बेहतर तरीके से हैंडल करने वाले ऐप्लिकेशन को
pointerInput मॉडिफ़ायर लागू करना चाहिए, ताकि PointerEvent मिल सके:
@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" />