2009-12-28 18 views
16

के साथ काम नहीं कर रहा है, मैं ऑनकी घटनाओं को प्राप्त करने के लिए केलीलिस्टर पर उपयोग कर रहा हूं। यह सामान्य कीबोर्ड के साथ ठीक काम करता है। लेकिन यह मुलायम कीबोर्ड के साथ काम नहीं करता है। मैं केवल संख्याओं के लिए की घटनाओं को प्राप्त करने में सक्षम हूं और वर्णमाला नहीं। क्या हल करने के लिए कोई कामकाज है? किसी भी तरह की मदद की सराहना की जाएगी।ऑनकेलिस्टर सॉफ्ट कीबोर्ड (एंड्रॉइड)

+0

यदि आप नरम कीबोर्ड से कुछ अक्षर नहीं लेकिन दूसरों को हो रही है अजीब लग रहा है। क्या आप अपने श्रोता का कोड पोस्ट कर सकते हैं, और आप इसे कहां संलग्न कर रहे हैं? –

+0

सार्वजनिक शून्य पर क्रेट (बंडल सेव किया गया इंस्टेंसस्टेट) { super.onCreate (savedInstanceState); setContentView (R.layout.login_screen); ईमेलटीटी = (एडिटटेक्स्ट) findViewById (R.id.email); emailTxt.setOnKeyListener (नई OnKeyListener() \t { \t \t सार्वजनिक बूलियन onKey (देखें वी, पूर्णांक कीकोड, KeyEvent घटना) \t \t { \t \t \t Log.i ("कुंजी मान", स्ट्रिंग। valueOf (keyCode)); \t \t}); } –

+0

मैं अभी के लिए चाबियाँ पढ़ रहा हूं। –

उत्तर

10

मुझे विश्वास नहीं है कि ऑनके लिस्टनर सॉफ़्टवेयर कीबोर्ड के साथ बिल्कुल कॉल किया जाता है। इसमें सॉफ़्टवेयर कीबोर्ड के साथ एक आईएमई डिवाइस होने के साथ कुछ करना है और आईएमई डिवाइस संभवतः कीबोर्ड के अलावा अन्य चीजें हैं। ऐसा लगता है कि केलीलिस्टर काफी बेकार है, क्योंकि यह केवल हार्डवेयर कीबोर्ड वाले फोन पर काम करता है। मैंने हाल ही में OnKeyListener का उपयोग करने के बजाय अपनी गतिविधि में EditText फ़ील्ड पर TextWatcher का उपयोग कर इस मुद्दे के आसपास काम किया।

+0

मैंने टेक्स्टवॉचर का उपयोग करने की कोशिश की लेकिन मुझे दबाए गए प्रत्येक कुंजी के लिए कीप और कीडाउन घटनाओं की आवश्यकता है। Textwatcher बस मुझे keydown घटना देता है। –

+0

मुझे नहीं लगता कि सॉफ्टवेयर कीबोर्ड से कीप और कीडाउन को सुनना संभव है। –

7

onKeyListener नरम कुंजीपटल

एंड्रॉयड 1.6 के बाद से चरित्र और संख्या चाबियाँ onKey घटना के माध्यम से नहीं जा रहे हैं के माध्यम से एंड्रॉयड 1.5 पर पूरी तरह से काम किया है, फिर भी डेल कुंजी

निराशा होती

3

यह करता है डिवाइस विशिष्ट लगता है। मैं पुष्टि कर सकता हूं कि यह ज़ूम और एसर ए 100 पर काम करता है। हालांकि, सैमसंग गैलेक्सी टैब प्लस केवल गैर-चरित्र बटन के लिए ईवेंट को निकाल देता है। (हनीकॉम चलाने वाले सभी डिवाइस)

1

श्रोताओं को अपनी विधि में डालकर और इसे पहली बार फिर से कॉल करके मुझे इसके आसपास मिल गया। ऑनक्रेट में मैं setKeyListenerForEnter() को कॉल करता हूं;

फिर, यहाँ विधि है:

सार्वजनिक शून्य setKeyListenerForEnter() {

final EditText search_entry = (EditText) findViewById(R.id.search_entry); 
    search_entry.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // If the event is a key-down event on the "enter" button 
      if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
       (keyCode == KeyEvent.KEYCODE_ENTER)) { 
       getSearchResults(v); 
       setKeyListenerForEnter(); 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

मुझे यकीन है कि अगर यह IME कुंजीपटल खुद को संभालने की तुलना में एक बेहतर समाधान है नहीं कर रहा हूँ, लेकिन यह एक समाधान है ।

4

यह शायद बेवकूफ है, लेकिन इस समय एंड्रॉइड इस तरह काम करता है।

प्रलेखन बताता है कि मुख्य कार्यक्रम केवल हार्डवेयर कुंजी स्ट्रोक के लिए प्रचारित नहीं होंगे, सॉफ्टवेयर नहीं।

डिवाइस निर्माताओं को मुख्य श्रोताओं के माध्यम से नरम कीबोर्ड कार्यक्रमों को प्रचारित करने के लिए वास्तव में निराश किया जा रहा है, हालांकि यह पूरी तरह से निर्माता के बराबर है और वास्तव में नरम और हार्ड कीबोर्ड को बराबर शर्तों के साथ इलाज करने के लिए है।

एंड्रॉइड 4.2.2 से शुरू हो रहा है, एंड्रॉइड सिस्टम ही सॉफ्ट कीबोर्ड के लिए महत्वपूर्ण स्टोक इवेंट्स का समर्थन नहीं करेगा, इसलिए निर्माता भी अपना रास्ता चुनने में सक्षम नहीं होंगे।

तो यहां केवल एकमात्र मूर्खतापूर्ण विकल्प है अपने स्वयं के आईएमई (सॉफ्ट कीबोर्ड) को लागू करना, और कीस्ट्रोक स्वयं को संभालना।

टेक्स्टवॉचर का उपयोग ज्यादातर मुख्य श्रोताओं को बदलने के लिए किया जा सकता है, हालांकि editText.setText (...); टेक्स्टवॉचर घटनाओं को भी ट्रिगर करेगा, इसलिए यदि कोई केवल टाइप की गई कुंजी में रूचि रखता है तो शायद टेक्स्टवॉचर एक समाधान नहीं है।

AutocomleteTextView या EditText के साथ TextWatcher का उपयोग करते समय सावधान रहें। TextWatcher घटनाओं के भीतर से AutocompleteTextView/EditText की सामग्री में टेक्स्ट को संशोधित न करें, अन्यथा आप शायद अनंत घटना/सुनवाई लूप में समाप्त हो जाएंगे।

उम्मीद है कि यह उपलब्ध विकल्पों को स्पष्ट करने में मदद करता है, लेकिन दुख की बात यह है कि यह एक समाधान समाधान प्रदान नहीं करता है।

निराशाजनक है कि Google उनके यूआई के इस महत्वपूर्ण पहलू पर चूक गया है।

-1
setFocusableInTouchMode(true); //Enable soft keyboard on touch for target view 

setFocusable(true); //Enable hard keyboard to target view 

उदाहरण:

public class CanvasView extends View{ 
    public CanvasView(Context c){ 
     super(c); 

     //enable keyboard 
     setOnKeyListener(new KeyBoard()); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 
    } 
} 
+0

क्या आप कृपया हमें एक उदाहरण दे सकते हैं कि कोई इस कोड का उपयोग कैसे कर सकता है? मैंने अभी कोशिश की और यह काम नहीं लग रहा है। – Simon

+0

सार्वजनिक वर्ग CanvasView देखें फैली { \t \t सार्वजनिक CanvasView (संदर्भ ग) { \t \t सुपर (ग); \t \t \t \t // कुंजीपटल सक्षम \t \t setOnKeyListener (नए कीबोर्ड()); \t \t सेट फोकस करने योग्य (सत्य); \t \t setFocusableInTouchMode (सत्य); \t}} // कैनवास दृश्य में कीबोर्ड सक्षम करें – user3309567

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