web-dev-qa-db-ja.com

非表示にする方法Android EditTextのソフトキーボード

通常、これらのフィールドを設定するために使用されるものの利便性として、EditTextフィールドとボタンのあるアクティビティがあります。ただし、ユーザーがEditTextフィールドの1つに触れると、Androidソフトキーボードが自動的に表示されます。デフォルトで非表示のままにしたい、nlessユーザーがメニューを長押しするボタンこれに対する解決策を探していくつかの答えを見つけましたが、今のところそれらを機能させることはできません。

私は次を試しました:

1-onCreateメソッドで、

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

2-onCreateメソッドでも、

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);

3-およびマニフェストファイルで、

<activity Android:name=".activityName" Android:windowSoftInputMode="stateAlwaysHidden"/>

これらの方法はいずれも機能しません。ユーザーがEditTextフィールドをクリックするたびに、ソフトキーボードが表示されます。ユーザーがメニューキーを長押しして明示的に表示した場合にのみ、ソフトキーボードを表示します。

なぜこれが機能しないのですか?

46
ScubaSteve

これはあなたを助けます

editText.setInputType(InputType.TYPE_NULL);

編集:

ソフトキーボードを表示するには、long key press event of menu buttonに次のコードを記述する必要があります

editText.setInputType(InputType.TYPE_CLASS_TEXT);
            editText.requestFocus();
            InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            mgr.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
86
Sandy

AndroidManifest.xmlActivityに次の属性を追加する必要があります。

<activity
    ...
    Android:windowSoftInputMode="stateHidden|adjustResize"
    ...
/>
31
Emran Hamza

私は時々それを行うためにちょっとしたトリックを使用します。目に見えないフォーカスホルダーをレイアウトの上部のどこかに配置しました。例えばこのような

 <EditText Android:id="@id/editInvisibleFocusHolder"
          style="@style/InvisibleFocusHolder"/>

このスタイルで

<style name="InvisibleFocusHolder">
    <item name="Android:layout_width">0dp</item>
    <item name="Android:layout_height">0dp</item>
    <item name="Android:focusable">true</item>
    <item name="Android:focusableInTouchMode">true</item>
    <item name="Android:inputType">none</item>
</style>

そしてonResumeで私は電話します

    editInvisibleFocusHolder.setInputType(InputType.TYPE_NULL);
    editInvisibleFocusHolder.requestFocus();

それは1.6から4.xまで私にとってうまく機能します

8
Manfred Moser

TextViewクラスを長い間調べた結果、キーボードが表示されないようにする方法を見つけました。トリックは、表示された直後に非表示にするため、キーボードが表示されて非表示になった後に呼び出されるメソッドを検索しました。

EditTextクラスを実装しました

public class NoImeEditText extends EditText {

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

    /**
     * This method is called before keyboard appears when text is selected.
     * So just hide the keyboard
     * @return
     */
    @Override
    public boolean onCheckIsTextEditor() {
        hideKeyboard();

        return super.onCheckIsTextEditor();
    }

    /**
     * This methdod is called when text selection is changed, so hide keyboard to prevent it to appear
     * @param selStart
     * @param selEnd
     */
    @Override
    protected void onSelectionChanged(int selStart, int selEnd) {
        super.onSelectionChanged(selStart, selEnd);

        hideKeyboard();
    }

    private void hideKeyboard(){
        InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getWindowToken(), 0);
    }
}

とスタイル

<com.my.app.CustomViews.NoImeEditText
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:editable="false"
    Android:background="@null"
    Android:textSize="@dimen/cell_text" />
7
cristianomad

EditorInfo.TYPE_NULLをビューに設定しても、ソフトキーボードは上昇し続けました。 nik431の答えから得たアイデアを除いて、答えはどれも私にとってはうまくいきませんでした。

editText.setCursorVisible(false);
editText.setFocusableInTouchMode(false);
editText.setFocusable(false);
6
Alex Burdusel

私のテスト結果:

setInputTypeを使用:

editText.setInputType(InputType.TYPE_NULL);

ソフトキーボードは消えますが、カーソルも消えます。

setShowSoftInputOnFocusを使用:

editText.setShowSoftInputOnFocus(false)

期待どおりに動作します。

3
David Guo

プログラムやxmlの両方で、システムキーボードが表示されないようにする方法は非常にさまざまです。ただし、これは、API 11より前のデバイスをサポートしているときに機能した方法です。

// prevent system keyboard from appearing
if (Android.os.Build.VERSION.SDK_INT >= 11) {
    editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
    editText.setTextIsSelectable(true);
} else {
    editText.setRawInputType(InputType.TYPE_NULL);
    editText.setFocusable(true);
}
2
Suragch

次の行は、まさに探しているものです。このメソッドはAPI 21に含まれているため、API 21以上で機能します。

edittext.setShowSoftInputOnFocus(false);
2
Shnkc

EditTextのxmlで以下のプロパティを設定してみましょう

Android:focusableInTouchMode="true" Android:cursorVisible="false".

起動時にソフトキーパッドを非表示にする場合は、この手順を実行してください link

1
Nikhil C George
   public class NonKeyboardEditText extends AppCompatEditText {

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

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

そして追加

NonKeyboardEditText.setTextIsSelectable(true);

アクティビティで単にEditText.setFocusable(false);を使用する

またはxmlで使用

Android:focusable="false"
0
Nur Gazi

こんにちは、このコードを使用してください、それは私のために100%働いています

EditText ee=new EditText(this);
ee.setShowSoftInputOnFocus(false);

*ただし、コードの下にあるedittextクリックでキーボードを非表示にしたいだけですが、キーボードアイコンと戻るボタンの上向きの記号が作成されます*指定されたコードは次のようになります

        EditText ee=new EditText(this);//create edittext
        final   View.OnTouchListener disable =new View.OnTouchListener() {
        public boolean onTouch (View v, MotionEvent event) {
        v.onTouchEvent(event);
        InputMethodManager img = 
        (InputMethodManager)v.getContext().getSystemService(INPUT_METHOD_SERVICE);
        if (img != null) {
        img.hideSoftInputFromWindow(v.getWindowToken(),0);
        }
        return true;
        }
        };
        //call touch listener
       ee.setOnTouchListener(disable);

テキストを変更するリスナーの場合にも使用します

        EditText ee= new EditText(this);
        Text=new TextWatcher(){

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int 
        after) {
        InputMethodManager img = (InputMethodManager) 
        getSystemService(INPUT_METHOD_SERVICE);
        img.hideSoftInputFromWindow(ee.getWindowToken(), 0);

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        InputMethodManager img = (InputMethodManager) 
        getSystemService(INPUT_METHOD_SERVICE);
        img.hideSoftInputFromWindow(ee.getWindowToken(), 0);

        }
       @Override
        public void afterTextChanged(Editable s) {
        InputMethodManager img = (InputMethodManager) 
        getSystemService(INPUT_METHOD_SERVICE);
        img.hideSoftInputFromWindow(ee.getWindowToken(), 0);

        }
        };
       ee.addTextChangedListener(Text);

onclickリスナーの場合にも使用

 EditText ee=new EditText(this);
 ee.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {

 InputMethodManager img= (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
 img.hideSoftInputFromWindow(ee.getWindowToken(),0);

 }});

すべてのコードが機能しますが、私にとっては最初のコードが最適です

0
yashpal singh

キーボードを隠す

editText.setInputType(InputType.TYPE_NULL);

キーボードを表示

etData.setInputType(InputType.TYPE_CLASS_TEXT);
etData.setFocusableInTouchMode(true);

親レイアウト内

Android:focusable="false"
0
Woz
weekText = (EditText) layout.findViewById(R.id.weekEditText);
weekText.setInputType(InputType.TYPE_NULL);
0
TOLIN THOMAS

以下の方法を使用してください

private fun hideKeyboard(activity: Activity, editText: EditText) {
    editText.clearFocus()
    (activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(editText.windowToken, 0)
}
0
Praveen

同じ簡単な指示に基づいた3つの方法:

a)。検索と同じくらい簡単な結果(1):

Android:focusableInTouchMode="true"

レイアウトの先行要素の構成の中で、例:

レイアウト全体が次のもので構成されている場合:

<ImageView>

<EditTextView>

<EditTextView>

<EditTextView>

次に、ImageViewパラメーターの中で(1)を記述できます。これにより、EditTextではなくImageViewにAndroidの注意が向けられます。

b)。 ImageViewとは別の先行要素がある場合、(2)を(1)に追加する必要があります:

Android:focusable="true"

c)。ビュー要素の上部に空の要素を作成することもできます。

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

この時点までのこの代替案は、私が見てきた中で最も単純なものです。それが役に立てば幸い...

0
Andrew