2010-09-30 10 views
5

मैं एक संख्यात्मक कीपैड चाहता था जिसमें एक जाना या किया गया बटन था जो गणना वर्ग को बंद और निष्पादित करता था। जहां से शुरू करना है, वहां से आमवेयर से एक टिप के लिए धन्यवाद, मुझे यह एमुलेटर पर खूबसूरती से काम कर रहा है। तब मैं इसे परीक्षण के लिए अपनी एचटीसी इच्छा पर लोड करने आया और यह बिल्कुल काम नहीं करता है। मुझे यकीन है कि यह एचटीसी भावना के कारण होना चाहिए क्योंकि यह स्वयं का आईम है लेकिन निश्चित रूप से एचटीसी फोन पर यह काम करने का एक तरीका होना चाहिए? कोई और इस मुद्दे को पाने में कामयाब रहा?एंड्रॉइड: एचटीसी इच्छा पर सॉफ्टकीबोर्ड नियंत्रण

उत्तर

14

मैं एचटीसी इनक्रेडिबल पर जो देख रहा हूं उसे दोहरा सकता हूं।

सभी सॉफ्ट कीबोर्ड आईएमई एक्शन बटन का समर्थन नहीं करेंगे। कुछ, जैसे ग्राफिटी सॉफ्ट "कीबोर्ड" की तरह, कोई बटन नहीं हो सकता है, अकेले आईएमई एक्शन बटन दें। यहां तक ​​कि Compatibility Definition Document डिवाइस के साथ प्रदान किए गए कीबोर्ड के लिए ऐसे एक्शन बटन की आवश्यकता के बारे में कुछ भी नहीं कहता है।

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

+0

तो क्या आप कह रहे हैं कि मेरा सबसे अच्छा तरीका है अपना खुद का कीबोर्ड बनाना, आईएमई नहीं बल्कि एक दृश्य? मेरे पास एक बिंदु पर एक गणना बटन था लेकिन यह कीबोर्ड द्वारा कवर किया गया था। यह परेशान है क्योंकि एचटीसी कीबोर्ड पर एक्शन कुंजी ग्रीन हो जाती है जब यह गो टाइप करने के लिए सेट होती है जो बहुत बढ़िया है, इसलिए यह समझता है कि यह एक्शनिड में केवल 0 देता है। मैं खुद को एक छोटा कीबोर्ड बनाने का विचार करना शुरू कर रहा हूं, लेकिन जाने से बचने का तरीका था? क्या यह सबसे अच्छा तरीका है? क्या एंड्रॉइड बेस्ट प्रैक्टिस पर कोई दस्तावेज है जो अतुलनीय रूप से पठनीय है? –

+0

ओह मैंने अंत में सब्सक्राइब किया है। इच्छा है कि मैं लंदन में अपने पाठ्यक्रमों में से एक में भाग ले सकता हूं, काफी उपयोगी होगा। दुख की बात है कि मैं परीक्षण और त्रुटि –

+0

@ ड्रीम आर्किटेक्ट द्वारा एक ही समय में जावा और एंड्रॉइड सीखने की कोशिश कर रहा हूं: "तो क्या आप कह रहे हैं कि मेरा सबसे अच्छा तरीका है अपना खुद का कीबोर्ड बनाना, आईएमई नहीं बल्कि एक दृश्य?" - एक सामान्य अनुप्रयोग के लिए, आपके पास गतिविधि के हिस्से के बराबर कार्रवाई बटन होगा। एक कैलकुलेटर के लिए, आपको अन्य "चाबियाँ" की आवश्यकता होगी (+, -, *, /, आदि), और इसलिए आपको शायद अपने स्वयं के बटन पैनल की आवश्यकता है। उस स्थिति में, मैं उस बटन पैनल में नंबर कुंजियां डालूंगा, जैसे नियमित कैलकुलेटर में उन्हें होता है। – CommonsWare

11

मुझे पता चल रहा है कि क्या एडीटर एक्शन लिस्टनर का उपयोग करके डोन/जीओ/रिटर्न बटन दबाया गया है, लेकिन आईएमई विकल्पों को कवर करने के लिए आईएमई विकल्प और कीइवेंट्स की जांच करना और साथ ही साथ किसी भी कीबोर्ड जो आईएमई विकल्प स्वीकार करते हैं।

(यह कोड एचटीसी अतुल्य कीबोर्ड के लिए काम करता है और साथ ही किसी भी कीबोर्ड IME विकल्प है कि)

EditText.setOnEditorActionListener(new TextView.OnEditorActionListener(){ 
    public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event){ 
     if(actionId == EditorInfo.IME_ACTION_DONE 
      || actionId == EditorInfo.IME_NULL 
      || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ 

      //Do something in here 
      return true; 
     } else { 
      return false; 
     } 
    } 
}); 
+0

मुझे डर है, कि इस कोड के साथ ** // कुछ यहाँ क्या ** भाग दो बार निष्पादित किया जाएगा .. आपको लगता है कि जांच कर सकता है? – Konsumierer

+0

धन्यवाद आशा .... मेरे लिए मुझे – hemu

+0

के लिए काम किया यह हो जाता है त्रुटि/AndroidRuntime (26,336): गंभीर अपवाद: मुख्य java.lang.NullPointerException ------ स्ट्रिंग पर "अगर (actionId == ..." – djdance

2

मैं inputType = "number" के साथ एक EditText उपयोग कर रहा था और आशा के समाधान को संशोधित करके समस्या का समाधान:

private TextView.OnEditorActionListener numberEnterListener = new TextView.OnEditorActionListener(){ 
     public boolean onEditorAction(TextView tv, int actionId, KeyEvent event){ 
      if(actionId == EditorInfo.IME_ACTION_DONE 
       || actionId == EditorInfo.IME_NULL 
       || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ 

       tv.clearFocus(); 

       //Stupid keyboard needs to be closed as well 
       InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(tv.getWindowToken(), 0); 

       return true; 
      } else { 
       return false; 
      } 
     } 
    }; 

संख्या पैड दिखाने से रोकने के लिए फोकस हटा दिया गया था। इम की आवश्यकता थी क्योंकि फोकस साफ़ करने के बाद भी एक सॉफ्ट कीबोर्ड अभी भी मौजूद था।

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