24

私はここまで来ました、途中まで来ましたが、完全ではありません。バックスペースを含む数字を入力するためのFragmentすべての通常の s を備えたダイヤラーを持っているので、ソフトキーボードは必要ありません。Buttonまた、ユーザーがテキストを貼り付けたり (長いクリック... デフォルトでは問題なく動作します)、入力内容を編集できるようにしたいので、カーソルが必要です。

ユーザーが内部をクリックした場合にソフトキーボードがポップアップしないようにする最も簡単な方法は、をnullEditTextに設定することですが、カーソルも強制終了します。inputType

では、ユーザーが何を試みてもフィールドにソフト キーボードが表示されず、貼り付け機能とカーソルを保持するEditTextには、どのようなコマンドを起動すればよいのでしょうか?EditText

android:windowSoftInputMode="stateAlwaysHidden"マニフェストでも試しましたが、役に立ちませんでした。

4

15 に答える 15

40

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

        // 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;
        }
    });
于 2012-12-20T15:19:46.693 に答える
7

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

最初の部分(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>

この結果は、無料でGooglePlayで入手できるGrapherアプリケーションで確認できます。

于 2013-01-08T21:59:22.930 に答える
4

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

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

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

または、プログラムで次のようにします。

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

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

于 2014-05-12T09:00:55.373 に答える
4

ここで@Lupsaaからの最良の解決策:

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

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

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

または、プログラムで次のようにします。

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

editText.setTextIsSelectable(真);

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

于 2015-04-08T08:20:58.720 に答える
3

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

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

于 2015-11-18T13:02:37.100 に答える
3

使用する

android:windowSoftInputMode="stateHidden" 

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

于 2013-03-11T11:15:23.870 に答える
2
    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);
    }
于 2015-07-13T16:09:43.217 に答える
0

EditText editText = (EditText)findViewById(R.id.edit_mine); editText.setOnTouchListener(新しい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;
    }
});

ハ...これは正しいやり方です...この仕事は完了しました...これはうまくいくでしょう!

于 2017-07-20T07:51:24.073 に答える
0

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

        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
于 2018-09-29T13:11:53.717 に答える