2012-01-07 20 views
16

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

private class MyOnKeyListener implements OnKeyListener { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN 
    && keyCode == KeyEvent.KEYCODE_ENTER) { 
     // FAIL 0 
     MyActivity.this.findViewById(R.id.someOtherView).requestFocus(); 

     // FAIL 1 
     InputMethodManager imm = (InputMethodManager)getSystemService(
     Context.INPUT_METHOD_SERVICE 
    ); 
     imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 

     // FAIL 2 
     MyActivity.this.getWindow().setSoftInputMode(
     WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN 
    ); 

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

उत्तर

23

आप एक XML विशेषता इस्तेमाल कर सकते हैं,

android:cursorVisible 

या आप इस विधि के साथ कोड में यह कर सकते हैं।

setCursorVisible(boolean). 
+0

यह तय किया गया। कुंजीपटल खुला होने पर कर्सर को प्रकट करके यह सही चीज भी करता है। जब आप इसे संपादित नहीं कर रहे हैं तो यह केवल कर्सर को छुपाता है। – JoJo

+0

WIsh मैं अधिक वोट दे सकता था क्योंकि मुझे 10 अन्य जटिल उत्तर मिले जो इसे ढूंढने से पहले काम नहीं कर पाए। धन्यवाद। – Glenn

+0

मुझे यह समस्या है: http://stackoverflow.com/questions/23677895/saving-an-edittext-to-bitmap ----- इस समाधान के साथ, पिन भी छिपा हुआ है! लेकिन मैं केवल लंबवत ब्लिंक लाइन छिपाना चाहता हूं। –

1

बस ध्यान दें बटन पर ध्यान केंद्रित करें।

+1

क्या वह असफल 0 उदाहरण नहीं है? – Dante

-1

यदि आप इसे संपादन योग्य नहीं करना चाहते हैं तो मैं नीचे बताऊंगा;

EditText orgid; 
orgid.setText(user.getOrgId()); 
orgid.setEnabled(false); 
2

विफल 0: अगर तत्व स्पर्श मोड में फ़ोकस करने योग्य नहीं है

कुछ लेआउट तत्व पर .requestFocus() कॉलिंग पर्याप्त नहीं है। किसी दृश्य या बटन पर फ़ोकस सेट करना चाहते हैं आप कॉल करनी होगी

.setFocusableInTouchMode(true); 

पहले या अपने .xml

+0

यह मेरे लिए समस्या हल हो गया। धन्यवाद! –

10

उपयोग नीचे दिए गए कोड में सेट EditText

editText.setOnKeyListener(new OnKeyListener() { 
      public boolean onKey(View view, int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_ENTER) { 
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(URLText.getWindowToken(), 0); 
        editText.setFocusable(false); 
        editText.setFocusableInTouchMode(true); 
        return true; 
       } else { 
        return false; 
       } 
      } 
     }); 
से फोकस दूर करने के लिए
+0

पिछले 2 दिनों से खोज रहा है ... बहुत सारे समाधान प्राप्त कर रहा है .. कुछ भी काम नहीं किया ... आपका समाधान उत्कृष्ट है .. ty – Abhi

+1

URLText क्या है? –

6

यहाँ जो पता लगाने कुंजीपटल & दिखा रहा है या जब कुंजीपटल छिपा हुआ है स्वचालित रूप से ध्यान केंद्रित करने को दूर अपने कस्टम EditText है

/** 
* Created by TheFinestArtist on 9/24/15. 
*/ 
public class KeyboardEditText extends EditText { 

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

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

    public KeyboardEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void setOnTouchListener(OnTouchListener l) { 
     super.setOnTouchListener(l); 
    } 

    @Override 
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 
     super.onFocusChanged(focused, direction, previouslyFocusedRect); 
     if (listener != null) 
      listener.onStateChanged(this, true); 
    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK 
       && event.getAction() == KeyEvent.ACTION_UP) { 
      if (listener != null) 
       listener.onStateChanged(this, false); 

      // Hide cursor 
      setFocusable(false); 

      // Set EditText to be focusable again 
      setFocusable(true); 
      setFocusableInTouchMode(true); 
     } 
     return super.onKeyPreIme(keyCode, event); 
    } 

    /** 
    * Keyboard Listener 
    */ 
    KeyboardListener listener; 

    public void setOnKeyboardListener(KeyboardListener listener) { 
     this.listener = listener; 
    } 

    public interface KeyboardListener { 
     void onStateChanged(KeyboardEditText keyboardEditText, boolean showing); 
    } 
} 
+1

यह काम नहीं कर रहा है। विधि 'onKeyPreIme' नहीं कहा जाता है। – rkyr

+0

@rkyr क्यों? यह मेरे लिए काम कर रहा है, मैंने कई डिवाइसों की कोशिश की है –

+0

@ किरील वाशिलो, अब नहीं कह सकते हैं। यह थोड़ी देर हो गया है क्योंकि मुझे उस मुद्दे का सामना करना पड़ा था। शायद किटकैट डिवाइस पर – rkyr

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