कीबोर्ड से जुड़ी कार्रवाइयां मैनेज करना

जब उपयोगकर्ता किसी ऐसे टेक्स्ट व्यू पर फ़ोकस करता है जिसमें बदलाव किया जा सकता है, जैसे कि EditText अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है और उपयोगकर्ता के पास हार्डवेयर कीबोर्ड अटैच होता है, ये सभी इनपुट को सिस्टम मैनेज करता है. हालांकि, अगर आपको डाइग्नोस्टिक टूल को या सीधे कीबोर्ड इनपुट को खुद हैंडल किया हो, तो कॉलबैक के तरीकों को लागू करके ऐसा किया जा सकता है KeyEvent.Callback से इंटरफ़ेस, जैसे कि onKeyDown() और onKeyMultiple().

Activity और और View क्लास, KeyEvent.Callback इंटरफ़ेस, ताकि आप आम तौर पर इन क्लास के अपने एक्सटेंशन में कॉलबैक मेथड को इस तरह ओवरराइड करते हैं उचित.

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

किसी एक मुख्य इवेंट को मैनेज करना

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

उदाहरण के लिए, यह तरीका किसी गेम को कंट्रोल करने के लिए, कीबोर्ड के कुछ बटन के बारे में बताता है:

Kotlin

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        KeyEvent.KEYCODE_D -> {
            moveShip(MOVE_LEFT)
            true
        }
        KeyEvent.KEYCODE_F -> {
            moveShip(MOVE_RIGHT)
            true
        }
        KeyEvent.KEYCODE_J -> {
            fireMachineGun()
            true
        }
        KeyEvent.KEYCODE_K -> {
            fireMissile()
            true
        }
        else -> super.onKeyUp(keyCode, event)
    }
}

Java

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_D:
            moveShip(MOVE_LEFT);
            return true;
        case KeyEvent.KEYCODE_F:
            moveShip(MOVE_RIGHT);
            return true;
        case KeyEvent.KEYCODE_J:
            fireMachineGun();
            return true;
        case KeyEvent.KEYCODE_K:
            fireMissile();
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}

कार्रवाई बदलने वाली कुंजियों को हैंडल करना

कार्रवाई बदलने वाली कुंजी के इवेंट का जवाब देने के लिए, जैसे कि किसी बटन को Shift के साथ जोड़ा जाना या कंट्रोल किया है, तो KeyEvent पर क्वेरी करो जिसे कॉलबैक मेथड को पास किया जाता है. कई तरीके कार्रवाई बदलने वाली कुंजियों के बारे में जानकारी दें, जैसे getModifiers() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है और getMetaState(). हालांकि, सबसे आसान समाधान यह पता लगाना है कि क्या आपकी पसंद के मुताबिक, कार्रवाई बदलने वाली सटीक कुंजी को इस तरह से दबाया जा रहा है isShiftPressed() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है और isCtrlPressed().

उदाहरण के लिए, यहां onKeyUp() को लागू करने का तरीका बताया गया है इसके बाद, जब Shift बटन को इनमें से किसी एक बटन से दबाकर रखा जाता है, तब ज़्यादा हैंडलिंग के साथ यह तरीका अपनाया जाता है:

Kotlin

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        ...
        KeyEvent.KEYCODE_J -> {
            if (event.isShiftPressed) {
                fireLaser()
            } else {
                fireMachineGun()
            }
            true
        }
        KeyEvent.KEYCODE_K -> {
            if (event.isShiftPressed) {
                fireSeekingMissle()
            } else {
                fireMissile()
            }
            true
        }
        else -> super.onKeyUp(keyCode, event)
    }
}

Java

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        ...
        case KeyEvent.KEYCODE_J:
            if (event.isShiftPressed()) {
                fireLaser();
            } else {
                fireMachineGun();
            }
            return true;
        case KeyEvent.KEYCODE_K:
            if (event.isShiftPressed()) {
                fireSeekingMissle();
            } else {
                fireMissile();
            }
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}

अन्य संसाधन

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