web-dev-qa-db-ja.com

Androidカーソルを失うことなく、EditTextからソフトキーボードを非表示にする

this に到達したので、途中まで到達しましたが、完全ではありません。バックスペースを含む数字を入力するためのすべての通常のFragmentsを備えたダイヤラーButtonがあるので、ソフトキーボードは必要ありません。また、ユーザーにテキストを貼り付ける機能(ロングクリック...はデフォルトで正常に機能します)を提供し、入力した内容を編集してカーソルが必要になるようにします。

ユーザーがEditTextの内側をクリックしてもソフトキーボードがポップアップしないようにする最も簡単な方法は、inputTypeをnullに設定することですが、それによってカーソルも強制終了されます。

したがって、どのようにEditTextを宣言し、EditTextフィールドにユーザーの試行に関係なくソフトキーボードを表示させないためにどのようなコマンドを起動する必要がありますか。カーソル?

私も試してみましたAndroid:windowSoftInputMode="stateAlwaysHidden"私のマニフェストでは、役に立たない。

24
user1537915

これは私のために働いた:

        // Update the EditText so it won't popup Android's own keyboard, since I have my own.
    EditText editText = (EditText)findViewById(R.id.edit_mine);
    editText.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            v.onTouchEvent(event);
            InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            if (imm != null) {
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            }                
            return true;
        }
    });
38
Eddie Sullivan

私はついに(私にとって)これに対する実用的な解決策を見つけました。

最初の部分(onCreate内):

// Set to TYPE_NULL on all Android API versions
mText.setInputType(InputType.TYPE_NULL);
// for later than GB only
if (Android.os.Build.VERSION.SDK_INT >= 11) {
    // this fakes the TextView (which actually handles cursor drawing)
    // into drawing the cursor even though you've disabled soft input
    // with TYPE_NULL
    mText.setRawInputType(InputType.TYPE_CLASS_TEXT);
}

さらに、Android:textIsSelectableをtrueに設定する(またはonCreateで設定する)必要があり、EditTextは初期化に焦点を合わせてはなりません。 EditTextが最初のフォーカス可能なビュー(これは私の場合)である場合、これをすぐ上に配置することで回避できます。

<LinearLayout
  Android:layout_width="0px"
  Android:layout_height="0px"
  Android:focusable="true"
  Android:focusableInTouchMode="true" >
    <requestFocus />
</LinearLayout>

この結果は、無料でGoogle Playで利用可能なGrapherアプリケーションで確認できます。

6
opticron

フラグtextIsSelectableをtrueに設定すると、ソフトキーボードが無効になります。

次のようにxmlレイアウトで設定できます。

<EditText
    Android:id="@+id/editText"
    ...
    Android:textIsSelectable="true"/>

または、次のようにプログラムで:

EditText editText = (EditText) findViewById(R.id.editText);
editText.setTextIsSelectable(true);

カーソルは引き続き存在し、選択/コピー/切り取り/貼り付けは可能ですが、ソフトキーボードは表示されません。

4
Andrei Lupsa

@Lupsaa here からの最適なソリューション:

フラグtextIsSelectableをtrueに設定すると、ソフトキーボードが無効になります。

次のようにxmlレイアウトで設定できます。

<EditText
Android:id="@+id/editText"
...
Android:textIsSelectable="true"/>

または、次のようにプログラムで:

EditText editText = (EditText) findViewById(R.id.editText);

editText.setTextIsSelectable(true);

カーソルは引き続き存在し、選択/コピー/切り取り/貼り付けは可能ですが、ソフトキーボードは表示されません。

3
Santacrab

これは私がやったことです。まず、マニフェスト内部アクティビティ

_Android:windowSoftInputMode="stateAlwaysHidden|adjustNothing"
_

次に、アクティビティ内にある場合はonCreate、フラグメント内にある場合はonActivityCreated

_editText.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            hideSoftKeyboard(v);
        }
    });
_

EditTextにフォーカスをリクエストすることを忘れないでください

_editText.requestFocus();
_

次に、他の回答と同じhideSoftKeyboard(v)メソッドを追加します。

_private void hideSoftKeyboard(View v){
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
_

ここで重要なのは、EditTextをクリックする前にrequestFocusを実行することです。フォーカスがない場合、最初のクリックでキーボードが表示されます(私の経験)。ただし、アクティビティに単一のEditTextがある場合、これが適用されます。これにより、カスタムキーボード(存在する場合)を使用して入力し、コピーして貼り付けることができ、カーソルが表示されたままになります。

3
Tuss

必要な正確な機能は、EditTextのフラグtextIsSelectabletrueに設定することにより提供されます。これにより、カーソルは引き続き存在し、選択/コピー/カット/貼り付けが可能になりますが、SoftKeyboardは表示されません。 API 11以降が必要です。

次のようにxmlレイアウトで設定できます。

<EditText
    Android:textIsSelectable="true"
    ...
/>

または、次のようにプログラムで:

EditText editText = (EditText) findViewById(R.id.editText);
editText.setTextIsSelectable(true);

API 10以下を使用している場合は、ここでハックが提供されます: https://stackoverflow.com/a/20173020/7550472

3
Kaushik NP

使用する

Android:windowSoftInputMode="stateHidden" 

Android:windowSoftInputMode="stateAlwaysHidden"の代わりにマニフェストファイルで

3
Droid Diva
    EditText text = (EditText) findViewById(R.id.text);
    if (Build.VERSION.SDK_INT >= 11) {
        text.setRawInputType(InputType.TYPE_CLASS_TEXT);
        text.setTextIsSelectable(true);
    } else {
        text.setRawInputType(InputType.TYPE_NULL);
        text.setFocusable(true);
    }
2
aikrikunov95

まず、アクティビティの下のマニフェストファイルにAndroid:windowSoftInputMode="stateHidden"を追加します。このような

<activity... Android:windowSoftInputMode="stateHidden">

XmlにこのAndroid:textIsSelectable="true"を追加します。これにより、ポインターが表示されます。

次に、アクティビティのonCreateメソッドで、これを追加します。

EditText editText = (EditText)findViewById(R.id.edit_text);
edit_text.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.onTouchEvent(event);
        InputMethodManager inputMethod = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputMethod!= null) {
            inputMethod.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }                
        return true;
    }
});
1
Jerin A Mathews

これは(私にとって)2ステップで完全に機能します。

  1. <activity... Android:windowSoftInputMode="stateHidden">マニフェストファイル

  2. EditText XMLコードにこれらのプロパティを追加します

    Android:focusable="true"
    Android:focusableInTouchMode="true
    

1と2の両方を追加する必要があります。そうすることでのみ機能します。

乾杯

1
user2144695

アクティビティのonCreateメソッドで次のコード行を使用して、ユーザーがEditTextフィールドをクリックまたはタッチしたときにのみキーボードがポップアップするようにすることができます。私はstackoverflowから多くのメソッドとコードを試しましたが、これはうまくいきませんでしたが、これは私にとって完璧です!これを試してください..:) `

 this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
0
Rohit Malavade

EditText editText =(EditText)findViewById(R.id.edit_mine); editText.setOnTouchListener(new OnTouchListener(){

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.onTouchEvent(event);
        InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }                
        return true;
    }
});

ha ...これが正しいやり方です...この仕事が終わった...これがうまくいく!

0
Ajay Jain

アクティビティのonCreateメソッドで次のコード行を使用して、ユーザーがEditTextフィールドをクリックまたはタッチしたときにのみキーボードがポップアップするようにすることができます。私はstackoverflowから多くのメソッドとコードを試しましたが、これはうまくいきませんでしたが、これは私にとって完璧です!これを試してください..:) `

        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
0
Rohit Malavade

最小SDKが21の場合、Java code:

editText.setShowSoftInputOnFocus(true);

Chen Suの記事 へのクレジット。

0
Alex Misiulia