2012-07-01 14 views
9

जब उपयोगकर्ता स्पेस बार दबाता है तो मैं एक गतिविधि शुरू करना चाहता हूं। जब मेरा स्पेस बार क्लिक किया जाता है तो मेरा कोड पता नहीं लगा रहा है।जब कोई कुंजी हिट होती है तो गतिविधि प्रारंभ करें

@Override 
public boolean dispatchKeyEvent(KeyEvent e) { 
    if (e.getKeyCode() == KeyEvent.KEYCODE_SPACE) { 
     Toast.makeText(MainActivity.this, "YOU CLICKED SPACE KEY", 
       Toast.LENGTH_LONG).show(); 
     return true; 
    } 
    Toast.makeText(MainActivity.this, "Didnt work", Toast.LENGTH_SHORT) 
      .show(); 
    return super.dispatchKeyEvent(e); 
}; 

}

उत्तर

8

आप या तो श्रोता एक Viewकि वर्तमान फोकस है, या अपने Activity में dispatchKeyEvent उपयोग करने के लिए, के रूप में in this answer देखा सेट कर सकते हैं।

दोनों काम करेंगे। आपकी टिप्पणी के लिए


उत्तर: तुम मेरे लिंक का पालन किया है, तो आप शायद अब तक Activity.dispatchKeyEvent(KeyEvent) क्रियान्वित किया है। :-)

कोड does not को anykey मैं प्रेस रजिस्टर, लेकिन जब मैं वापस कुंजी यह मेरे लिए toasts "फ्लॉप काम" धक्का

आप एमुलेटर का उपयोग करने की हो रहा है? मैं पूछता हूं क्योंकि नवीनतम एसडीके को एमुलेटर कीबोर्ड के साथ कुछ समस्याएं प्रतीत होती हैं। विशेष कुंजी (डीपीएडी, होम, बैक इत्यादि) काम करते हैं, लेकिन ऑनस्क्रीन, क्यूडब्लूटीटीई कीबोर्ड किसी भी प्रेस को पंजीकृत नहीं करता है। मेरे लैपटॉप में भौतिक कीबोर्ड किसी भी प्रेस को पंजीकृत नहीं करेगा।

मुझसे मत पूछो क्यों।

और मैं कहता हूं कि इस हफ्ते मैंने लिंक में जवाब पोस्ट किया था, और यह ठीक काम कर रहा था। परिवर्तन यह है कि मैंने आज सुबह एंड्रॉइड एसडीके को आर 20/जेबी में अपडेट किया, इसलिए मुझे लगता है कि यह एक कारक हो सकता है।

हालांकि, यह सिर्फ एक असली डिवाइस पर काम करेंगे। मैंने अभी अपने टैबलेट (पी 7510/हनीकॉम्ब 3.2) में एक भौतिक कीबोर्ड कनेक्ट किया है, और यह स्पेस प्रेस को ठीक से सुनता है।

मामले तुम अब भी शक कर रहे हैं, यहाँ सबूत है: :-)

enter image description here

+0

तो हाँ, या तो आपने उस श्रोता को एक दृश्य में सेट नहीं किया है, या जिस दृश्य के लिए आप श्रोता सेट करते हैं, वह स्पेस बार दबाते समय फोकस नहीं है। – davidcesarino

+0

मैंने प्रेषण का उपयोग कर अपना कोड संपादित किया। मैं इसे दूसरी तरफ कोशिश करने जा रहा हूं लेकिन इस बीच मेरा अद्यतन कोड पोस्ट किया गया है। –

+0

तो, क्या यह काम करता है? जब आप एंटर कुंजी दबाते हैं तो टोस्ट दिखाई नहीं देता है? – davidcesarino

1

इस मामले के लिए, मैं ओवरराइड समारोह 'onKey'

का इस्तेमाल किया है क्या मैंने किया है है
@Override 
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) 
{ 
    if (keyCode == nNeededKeyCode) 
    { 
     //do something 
    } 
    return true; 
} 

ps सबसे पहले आपको प्रेस प्रेस इवेंट

1

कॉपी/पेस्ट उत्तर के लिए खेद है, लेकिन यह आपके द्वारा किए जा रहे प्रयासों को पूरा करने के लिए 'ऑनके लिस्टनर()' का उपयोग करने की आवश्यकता है।

यह तब होगा जब उपयोगकर्ता "स्पेसबार" दबाएगा और फिर स्पेसबार को जाने देता है। यदि आप उन्हें जाने के लिए इंतजार नहीं करना चाहते हैं, तो आप मेरे बूलियन मानों को हटा सकते हैं, और अपने कोड को ऑनडाउन फ़ंक्शन में निष्पादित कर सकते हैं। उम्मीद है की यह मदद करेगा।

boolean spacePressed = false; 
@Override 
public boolean onKeyDown(View arg0, Editable arg1, int arg2, KeyEvent arg3) { 
    // TODO Auto-generated method stub 
     switch (keyCode) { 
       case KeyEvent.KEYCODE_SPACE: 
       { 
        spacePressed = true; 
        return true; 
       } 
       // other cases can go here 
    } 

    return true; 
}// End of onKeyDown 



@Override 
public boolean onKeyUp(View arg0, Editable arg1, int arg2, KeyEvent arg3) { 
    if (spacePressed){ 
     // start intent 

     // make this false again, so other keys won't trigger it 
     spacePressed = false; 
    } 

    return true; 
}// End of onKeyUp 
2
public abstract boolean onKey (View v, int keyCode, KeyEvent event) 

इस समारोह जो कुंजी दबाने कि जाँच करने के लिए इस्तेमाल किया जा सकता।