2012-08-15 14 views
5

जब सॉफ्ट कीबोर्ड दिखाया जाता है तो मैं बैक बटन को ओवरराइड करना चाहता हूं। असल में जब बैक बटन हिट होता है, तो मैं कीबोर्ड को खारिज करना चाहता हूं, और मैं कुछ टेक्स्ट जोड़ना चाहता हूं जो उपयोगकर्ता ने उस संपादन टेक्स्ट फ़ील्ड में टाइप किया है। तो मूल रूप से मुझे यह जानने की जरूरत है कि कीबोर्ड कब खारिज कर दिया जाता है। चारों ओर खोज करने के बाद, मुझे एहसास हुआ कि इसके लिए कोई एपीआई नहीं है, और ऐसा करने का एकमात्र असली तरीका आपकी एडिटटेक्स्ट क्लास बनाना होगा।एंड्रॉइड कस्टम एडिटटेक्स्ट और बैक बटन ओवरराइड

तो मैं अपने ही EditText वर्ग बनाया है और इस

public class CustomEditText extends EditText 
{ 

    public CustomEditText(Context context) 
    { 
     super(context); 
     init(); 
    } 

    public CustomEditText(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     init(); 
    } 

    public CustomEditText(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    private void init() 
    { 

    } 

} 

तरह EditText बढ़ाया मैं भी करने से कीबोर्ड बंद, इस विधि

@Override 
     public boolean dispatchKeyEventPreIme(KeyEvent event) 
     { 
      if (KeyEvent.KEYCODE_BACK == event.getKeyCode()) 
      { 
       Log.v("", "Back Pressed"); 

          //Want to call this method which will append text 
          //init(); 
      } 
      return super.dispatchKeyEventPreIme(event); 
     } 

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

एक और त्वरित सवाल, क्या किसी को पता है कि इस विधि को दो बार क्यों कहा जाता है? जैसा कि आप समय के लिए देख सकते हैं, मैंने इसे काम करने के लिए एक त्वरित लॉगकट संदेश जोड़ा है, लेकिन जब मैं बैक बटन दबाता हूं, तो यह दो बार प्रिंट करता है, किसी भी कारण से यह ऐसा क्यों करेगा?

किसी भी मदद की बहुत सराहना की जाएगी !!

उत्तर

5

यह प्रेषण के कारण है ACTION_DOWN और ACTION_UP दोनों पर प्रेषण के कारण है।
आपको केवल तब ही प्रक्रिया करना होगा जब कुंजी नीचे दबाया जाए। पहला सवाल के लिए आप dispatchKeyEventPreIme

+0

आह, मूर्ख मुझे, यह महसूस करना चाहिए था। लेकिन मेरे दूसरे प्रश्न के संबंध में। क्या आपको पता है कि जब कीबोर्ड को खारिज कर दिया जाता है तो मैं संपादन टेक्स्ट फ़ील्ड में टेक्स्ट कैसे पास करूंगा? – AdamM

+0

संपादन की जांच करें। – nandeesh

+0

इतना आसान फिक्स। बहुत बहुत धन्यवाद, पूरी तरह से काम करता है !!! – AdamM

3

क्यों दो बार में

setText(getText().toString() + " whatever you want to append"); 

कर सकता है: तो का उपयोग

if(event.getAction() == KeyEvent.ACTION_DOWN)

संपादित करें? शायद प्रेस डाउन एंड अप इवेंट पर विधि कहा जाता है।

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