2009-10-20 19 views
6

मैंने चंद्र लैंडर नमूना के आधार पर एक सरल एंड्रॉइड गेम बनाया है, और मुझे महत्वपूर्ण घटनाओं को संभालने में समस्या है। जब गतिविधि शुरू होती है, तो केडडाउन या ऑनकेप पर केवल एक ही कुंजी को डीपीएड अप/डाउन/बाएं/दायां कुंजी कहा जाता है। कोई भी मेनू, बैक, या dpad_center कुंजी पर लागू नहीं है। हालांकि, एक बार जब मैंने डीपीएड ऊपर/नीचे/बाएं/दाएं बटनों में से एक को धक्का दिया है, तो मेनू, बैक, या dpad_center कुंजी दबाकर इन विधियों को ट्रिगर करें। मुझे कोई गलती नहीं मिल रही है, या क्या गलत हो रहा है इसका कोई संकेत नहीं है।ऑनकेडाउन हमेशा एंड्रॉइड ऐप में नहीं कहा जाता है

यह संभव है कि फोकस गलत हो - गतिविधि स्क्रीन पर एक बटन से शुरू की गई है, इसलिए यह टचस्क्रीन मोड में हो सकती है। यदि ऐसा है, तो बैक बटन को छूना नहीं चाहिए मुझे सही फोकस मोड में ले जाना चाहिए ताकि मैं ईवेंट को पकड़ सकूं?

मैं एसडीके-1.5 आर 3 से एम्यूलेटर का उपयोग कर रहा हूं। मैं अभी तक एक असली फोन पर कोशिश करने में सक्षम नहीं हूं। यहाँ मेरा ऑनकाउन है।

public boolean onKeyDown(int keyCode, KeyEvent msg) 
{ 
    Log.d(TAG, "onKeyDown: " + keyCode); 
    return super.onKeyDown(keyCode, msg); 
} 

धन्यवाद

मैट

उत्तर

24

एक दृश्य में या गतिविधि में इस OnKeyDown है?

यदि सेटकंटेंट व्यू को एक दृश्य में गुजरने के लिए कहा जाता है, और उस दृश्य ने इसे सेट करने योग्य (सत्य) सेट किया है, तो सभी महत्वपूर्ण घटनाएं गतिविधि को बाईपास करेंगी और सीधे दृश्य में जाएंगी।

दूसरी तरफ, यदि आपका ऑनकेडाउन दृश्य में है, और आपने गतिविधि पर सेटकंटेंट व्यू को नहीं देखा है और दृश्य पर सेट फोकस करने योग्य (सत्य) है, तो आपकी गतिविधि मुख्य घटनाएं प्राप्त करेगी, न कि दृश्य।

उन विशिष्ट कॉलों को देखें लेकिन मुझे लगता है कि आप इसे फोकस मुद्दा होने के बारे में सही हैं।

+6

यह दृश्य में था - लेकिन यह जांचते समय, मुझे एहसास हुआ कि मैंने सेट फोकस करने योग्य इंटचोड मोड सक्षम नहीं किया है - यह समस्या को ठीक करने में जोड़ रहा है। –

+0

आह, ठंडा। मुझे खेद है कि मुझे वास्तविक समस्या याद आई लेकिन मुझे खुशी है कि मैं मदद कर सकता हूं। – haseman

+1

मैंने इसे एक टुकड़े में करने की कोशिश की लेकिन मेरे विचार के ऑनडाउन() को कभी भी कॉल नहीं किया गया, भले ही मैंने इसे सही करने की स्थिरता निर्धारित की हो: 'searchView.setFocusable (true); searchView.setFocusableInTouchMode (सही); '। हालांकि गतिविधि के ऑनकेडाउन() को बुलाया जाता है, लेकिन दुर्भाग्य से पिछली कुंजी के लिए नहीं। – faizal

6

गतिविधि की ऑनकेडाउन/ऑनकेप विधियों को हमेशा नहीं कहा जाता है। उनके विपरीत प्रेषण गतिविधि पर हमेशा से निकाल दिया गया। यहां keydown/keyup तर्क ले जाएं। अच्छा काम करता है।

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN) { 
     // keydown logic 
     return true; 
    } 
    return false; 
} 
+1

इसे पोस्ट करने के लिए धन्यवाद। बहुत उपयोगी :) –

संबंधित मुद्दे