2012-01-07 30 views
16

我的佈局上有一個EditText。用戶輸入一些文本並點擊「完成」鍵後,我想從中刪除閃爍的光標。我已經搜刮了StackOverflow並找到了3個對我無效的答案。閃爍的光標仍然保留。如何在用戶編輯完成後從EditText中刪除焦點?

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 2012-01-14 00:02:57

+0

WIsh我可以給予更多的選票,因爲我發現了其他10個複雜的答案,在找到這個答案之前無效。謝謝。 – Glenn 2012-12-07 22:42:47

+0

我有這個問題:http://stackoverflow.com/questions/23677895/saving-an-edittext-to-bitmap -----有了這個解決方案,引腳也隱藏了!但我想隱藏只有垂直眨眼線。 – 2015-04-26 10:10:50

1

只需將焦點設置爲完成按鈕。

+1

這不就是他的失敗0例子嗎? – Dante 2012-01-07 02:36:45

-1

如果你不希望它是可編輯的,我會說下面做;

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

錯誤0:

一些佈局元件上調用.requestFocus()是不夠的,如果元件不處於觸摸模式可聚焦。如果你想將焦點設置到一個視圖或按鈕,您可以撥打

.setFocusableInTouchMode(true); 

第一或設置在你的.xml

+0

它解決了我的問題。謝謝! – 2016-04-18 20:44:55

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 2015-07-21 14:59:51

+1

什麼是URLText? – 2017-06-06 09:37:34

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 2015-12-11 12:43:38

+0

@rkyr爲什麼?它爲我工作,我已經嘗試了幾個設備 – 2017-05-22 13:57:03

+0

@KirillVashilo,現在不能說。自從我面對這個問題已經有一段時間了。可能在KitKat設備上 – rkyr 2017-05-22 16:07:15

相關問題