2010-11-09 109 views
2

如何關閉EditText的IME功能?Android:如何關閉EditText的IME?

或者:如何避免顯示IME鍵盤?

我有一個佈局,我的特殊鍵盤坐落在EditText以下,所以不需要顯示IME。請理解,我無法將我的鍵盤作爲輸入法使用,因爲它只適用於EditText,並且在任何其他環境中使用它只會導致問題。

我試圖用

getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
在活動的 onCreate()

,但似乎並沒有做在這種情況下任何東西。

+0

這是自定義EditText允許從硬件鍵盤輸入嗎?如果沒有,也就是說,如果它只是從您的自定義軟件鍵盤控制,那麼它可能根本不應該編輯... – 2010-11-09 09:44:41

+0

@reuben:好的,這就是問題所在。用戶不應侷限於軟鍵盤。由於文本的長度不受限制,因此應該允許他/她通過點擊「EditText」來導航。 – sjngm 2010-11-09 13:53:05

回答

5

想我找到了一種方法來做到這一點...子類EditText,並覆蓋onCheckIsTextEditor()返回false:

public class EditTextEx extends EditText { 

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

    @Override 
    public boolean onCheckIsTextEditor() { 
     return false; 
    }  
} 

我測試過它,我不能讓軟鍵盤顯示在所有。

+0

是的,太棒了!你是第一個回答我的四個問題中的任何一個。恭喜:) – sjngm 2010-11-10 06:28:07

+0

'editText.setInputType(EditorInfo.TYPE_NULL);'具有相同的效果 – betorcs 2014-09-09 20:39:03

+0

注意:它會禁用光標 – vuhung3990 2017-07-27 03:26:31

0

雖然試圖得到它的工作我也試過:

inputField.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     } 
    }); 

inputField.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     return false; 
    } 
}); 

兩個被調用,但也隱藏IME-彈出。

1
editText.setInputType(EditorInfo.TYPE_NULL); 
+0

雖然這不會禁用遊標。 – Sam 2017-11-17 20:57:54