2017-07-21 10 views
1

custom in-app keyboardを使用しているため、システムキーボードを無効にする必要があります。私はそれを行うことができますsetTextIsSelectableでキーボードを無効にした後でキーボードを有効にする方法

editText.setShowSoftInputOnFocus(false); 

Android API 21+しかし、ダウンAPI 11に同じことを行うために、私は

editText.setTextIsSelectable(true); 

をしています時々私はsetTextIsSelectableでそれを無効にした後、再びシステムキーボードを表示したいです。しかし、私はどのように把握することはできません。次の操作を行うとシステムキーボードが表示されますが、ユーザーがキーボードを隠してからEditTextを再度クリックすると、キーボードは表示されません。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, 0); 

は私がeditText.setOnFocusChangeListenerを行い、その後、手動で表示したり、システムのキーボードを隠すことができると思いますが、私はsetTextIsSelectableがした何でも元に戻すことを好むだろう。以下も動作しません。

editText.setFocusable(true); 
editText.setFocusableInTouchMode(true); 
editText.setClickable(true); 
editText.setLongClickable(true); 

どうすればいいですか?次の操作を行って

Related question

答えて

1

短い答え

setTextIsSelectable(true)の効果を逆転し、EditTextがフォーカスを受け取ったときにキーボードが再び表示することができます。

editText.setTextIsSelectable(false); 
editText.setFocusable(true); 
editText.setFocusableInTouchMode(true); 
editText.setClickable(true); 
editText.setLongClickable(true); 
editText.setMovementMethod(ArrowKeyMovementMethod.getInstance()); 
editText.setText(editText.getText(), TextView.BufferType.SPANNABLE); 

説明

trueisTextSelectable()で示すからキーボードを防ぐもの。 hereがあります(@adnealのおかげで)。

setTextIsSelectableのソースコードは、このよう

public void setTextIsSelectable(boolean selectable) { 
    if (!selectable && mEditor == null) return; // false is default value with no edit data 

    createEditorIfNeeded(); 
    if (mEditor.mTextIsSelectable == selectable) return; 

    mEditor.mTextIsSelectable = selectable; 
    setFocusableInTouchMode(selectable); 
    setFocusable(selectable); 
    setClickable(selectable); 
    setLongClickable(selectable); 

    // mInputType should already be EditorInfo.TYPE_NULL and mInput should be null 

    setMovementMethod(selectable ? ArrowKeyMovementMethod.getInstance() : null); 
    setText(mText, selectable ? BufferType.SPANNABLE : BufferType.NORMAL); 

    // Called by setText above, but safer in case of future code changes 
    mEditor.prepareCursorControllers(); 
} 

mTextIsSelectablesetTextIsSelectable(false)falseに第一セット以上の短い応答セクション内のコードであり、他の副作用一つずつの全てを取り消します。

関連する問題