2012-05-07 15 views
13

मैं एंड्रॉइड एप्लिकेशन में एक खोज विकल्प बना रहा हूं।कीबोर्ड के भेजें बटन को अक्षम करते समय कुछ भी टाइप नहीं किया गया है [एंड्रॉइड]

पर "खोज" दबाकर स्क्रीन-कीबोर्ड एक ईवेंट ट्रिगर्स जो सर्वर को क्वेरी भेजता है। मैं जो करना चाहता हूं वह स्क्रीन-कीबोर्ड पर "खोज" बटन को अक्षम कर रहा है जब उसके पाठ EditText में कोई टेक्स्ट टाइप नहीं किया गया है।

मैं EditText को यह कहा:

android:imeOptions="actionSearch"

तो यही कारण है कि कीबोर्ड डिफ़ॉल्ट रूप से जगह में एक "खोज" बटन मिल गया है है "दर्ज"/"हो गया"। (बस अगर आप सोच रहे हैं)।

उत्तर

16

हम एंड्रॉयड कीबोर्ड पर कार्रवाई बटन अक्षम नहीं कर सकता। आपको संपादक कार्रवाई श्रोता में खाली स्ट्रिंग की जांच के साथ बसना होगा।

+0

यह बुरा है। मुझे लगता है कि एक खाली स्ट्रिंग के लिए जांच करना होगा। मैं यह जवाब चुनूंगा क्योंकि यह मेरे प्रश्न का असली जवाब है, न केवल विकल्प। – Pieter888

-1
SearchInput.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 
      if(SearchInput.getText().toString().length() == 0) 
      { 
       Search.setClickable(false); 
      } 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 
      Search.setClickable(false); 


     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      // TODO Auto-generated method stub 
      Search.setClickable(true); 
     } 

    }); 

या इस प्रयास करें ..! फैंसी त्रुटि dilog के लिए

Search.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      if(searchinput.getText().toString().length() == 0) 
      { 
       searchinput.setError("Enter something Blah Blah..!"); 
      } 
      else 
      { 


     // Original Functions Goes Here 
      } 

पाठ संपादित में निम्न कोड का प्रयोग करें,

android:imeOptions="flagNoEnterAction" 

मैं flagNoEnterAction = "false" सेट करने में सक्षम नहीं कर रहा हूँ लेकिन कोई मदद कर सकते हैं

+0

यह केवल तभी काम करता है जब खोज बटन एक बटन था जिसे मैंने स्वयं ऐप में बनाया था। लेकिन मैं एंड्रॉइड-कीबोर्ड पर एंटर/सर्च-कुंजी को अक्षम करने के बारे में बात कर रहा हूं। – Pieter888

+0

मैं इस उत्तर को ऊपर नहीं उठाऊंगा क्योंकि यह मेरे प्रश्न का वैध उत्तर नहीं है। मैं एंड्रॉइड के ऑन-स्क्रीन कीबोर्ड के खोज बटन को अक्षम करना चाहता हूं। मेरे आवेदन में एक बटन नहीं है। – Pieter888

+0

उत्तर संपादित, तीसरा कोड जोड़ा गया, शायद आपको या किसी और को कम से कम – VenomVendor

0

इस कोशिश (हो सकता है कि आप सटीक नतीजे न हों, लेकिन हो सकता है कि आप निकटतम हो सकें।

1) एंड्रॉयड निकालें: एक्सएमएल

2) एक कस्टम TextWatcher addTextChangedListener (TextWatcher द्रष्टा बनाएं) आप कुंजीपटल गतिशील इस

textMessage = (EditText)findViewById(R.id.textMessage); 
textMessage.addTextChangedListener(new TextWatcher(){ 
     public void afterTextChanged(Editable s) { 
      if(firstTime){//a boolean you init to true 
      firstTime = false; 
      textMessage.setImeOptions(EditorInfo.IME_ACTION_SEARCH); 
     } 
     public void beforeTextChanged(CharSequence s, int start, int count, int after){} 
     public void onTextChanged(CharSequence s, int start, int before, int count){} 
    }); 
+0

आपकी मदद कर सकता है, लेकिन दृश्य के निर्माण के बाद बटन के 'ImeOptions' को बदलना संभव नहीं है। लेकिन यह वैसे भी सही समाधान की तरह महसूस नहीं करता है क्योंकि मैं कुछ टाइप किए जाने तक एंटर/सर्च-बटन अक्षम होना चाहता हूं। यदि यह उत्तर काम करता है, तो यह "खोज" के बजाय एंटर-बटन पर "संपन्न" टेक्स्ट दिखाएगा। मैं बस बटन को भूरे रंग के बाहर या उपयोगकर्ता को दिखाने के लिए कुछ चाहता हूं कि वह खाली स्ट्रिंग पर खोज न कर सके। – Pieter888

0

की तरह कुछ बदलने की अनुमति देता से imeOptions = "actionSearch" आप कस्टम संपादन टेक्स्ट बनाने की आवश्यकता है, इसमें संपादन टेक्स्ट और @ ओवरराइड को विधि में विस्तारित करें।

यहां उदाहरण कोड है।

private ArrayList<Integer> keysToIgnore = new ArrayList<Integer>(); 

    public EditTextCus(Context context) { 
     super(context); 
    } 

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

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



private Boolean keyInIgnoreList(int keyCode) {  
     for (Integer i:keysToIgnore){ 
      int key = i.intValue(); 
      if (key == keyCode) 
       return true; 
     } 
     return false; 
    } 

    public void addKeyToIgnoreList(int keyCode) { 

     if (!keyInIgnoreList(keyCode)){ 
      keysToIgnore.add(keyCode); 
     } 
    } 

    public void removeKeyFromIgnoreList(int keyCode) { 

     if (keyInIgnoreList(keyCode)){ 
      Integer key=new Integer(keyCode); 
      keysToIgnore.remove(key); 
     } 
    } 


@Override 
    public boolean dispatchKeyEventPreIme(KeyEvent event) { 
     //Log.d("ws", "dispatchKeyEventPreIme(" + event + ")"); 

      // swallow the any key in the ignore list 
      if (keyInIgnoreList(event.getKeyCode())) { 
       KeyEvent.DispatcherState state = getKeyDispatcherState(); 
       if (state != null) { 
        if (event.getAction() == KeyEvent.ACTION_DOWN 
          /*&& event.getRepeatCount() == 0*/) { 
         state.startTracking(event, this); 
         return true; 
        } else if (event.getAction() == KeyEvent.ACTION_UP 
          && !event.isCanceled() && state.isTracking(event)) { 
         return true; 
        } 
       } 
      } 
     } 
     return super.dispatchKeyEventPreIme(event); 
    } 

आप भी इस कुंजी खोज करने के लिए कर सकते हैं:

mCustomEditText.setOnEditorActionListener(new OnEditorActionListener() { 

      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
       if(actionId==EditorInfo.IME_ACTION_SEARCH && event.getAction()==KeyEvent.KEYCODE_SEARCH){ 
        System.out.println("Search pressed........."); 
       } 
       return false; 
      } 
     }); 
+0

एंटर (66) और खोज (84) दोनों से कुंजीकोड जोड़ने के बाद भी यह इसे अनदेखा नहीं करता है। उस लाइन को असम्बद्ध करने के बाद जहां आप ईवेंट लॉग करते हैं, मुझे पता चला कि यह कभी भी 'प्रेषणकेईवेन्टप्रिमी' तक नहीं पहुंचता है। कंसोल पर कुछ भी आउटपुट नहीं किया जाता है। – Pieter888

+0

@ Pieter888 जब एचटीसी फोन की तरह खोज की हार्ड कुंजी आपको 'प्रेषणकेईवेन्टप्रिमी' दिखाई देगी तो यह विधि कॉल करेगी और सॉफ्टकीबोर्ड इवेंट प्राप्त करने के लिए आप इस 'mCustomEditText.setOnEditorActionListener' को उत्तर में अपडेट के रूप में आजमा सकते हैं। सॉफ्टकीबोर्ड के लिए एंटर कुंजी के लिए इस विधि में प्रयास करें । – Herry

0

अपने Activity में OnKeyListener को लागू करें।

इस कुंजी लिस्टर को अपने EditText पर जोड़ें।

myEditText.setOnKeyListener(this); 
अपने Activity में

ओवरराइड onKey()

@Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(v.getId() == R.id.myEditText) 
     { 
      if(KeyEvent.KEYCODE_ENTER == keyCode) 
      { 
       if(myEditText.getText().toString().equals("") || myEditText.getText().toString().equals(null)) 
       { 
        Toast.makeText(KeyboardTestActivity.this, "Event Eaten", Toast.LENGTH_SHORT).show(); 
        Log.e("onKey", "Event Eaten"); 
        return true; 
       } 
      } 
     } 
     return false; 
    } 

और इस प्रक्रिया के बाद यह एक टोस्ट प्रदर्शित करेगा जब भी आपके EditText खाली है और आप खोज कुंजी दबाएँ।

नोट: onKey() कुंजीडाउन के लिए दो बार और फिर कुंजी के लिए बुलाया जाता है। आपको onKey() विधि में पैरामीटर के रूप में प्राप्त KeyEvent इंस्टेंस का उपयोग करके इसे फ़िल्टर करना होगा।

+0

मैंने इस दृष्टिकोण का परीक्षण किया। यह ठीक काम कर रहा है ..... –

0

अपने टेक्स्ट फ़ील्ड में OnEditorActionListener संलग्न करें और एडिटर एक्शन विधि से सत्य लौटाएं, जब actionId IME_ACTION_DONE के बराबर है। यह छुपा से नरम कुंजीपटल पाएगा:

EditText txtEdit = (EditText) findViewById(R.id.txtEdit); 
txtEdit.setOnEditorActionListener(new OnEditorActionListener() { 

    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
    if (actionId == EditorInfo.IME_ACTION_DONE) { 
     // your additional processing... 
     return true; 
    } else { 
     return false; 
    } 
    } 
}); 

देखें इस LINKLINK

+0

वह एक्शन बटन को अक्षम करना चाहता है, कीबोर्ड को छिपाने से नहीं रोकता है। – Ronnie

3
setOnEditorActionListener(new TextView.OnEditorActionListener() { 
if (txtView.getText().toString().trim().length() == 0) { 
    Toast.makeText(getApplicationContext(), "Please Enter some text to search", 
    Toast.Short).show(); 
    return true; // returning true will keep the keyboard on 
} 
else search(); 
संबंधित मुद्दे

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