edittextでキーパッドポップアップを無効にする方法は?


85

私のアプリでは、すべての画面の最初のビューはEditTextであるため、画面に移動するたびに画面上のキーパッドがポップアップします。EditTextを手動でクリックしたときに、このポップアップを無効にして有効にするにはどうすればよいですか????

    eT = (EditText) findViewById(R.id.searchAutoCompleteTextView_feed);

    eT.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {

            if(hasFocus){
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
            imm.hideSoftInputFromWindow(eT.getWindowToken(), 0);
            }
        }
    });

xmlコード:

<ImageView
    android:id="@+id/feedPageLogo"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:src="@drawable/wic_logo_small" />

<Button
    android:id="@+id/goButton_feed"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="@string/go" />

<EditText
    android:id="@+id/searchAutoCompleteTextView_feed"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/goButton_feed"
    android:layout_toRightOf="@id/feedPageLogo"
    android:hint="@string/search" />

<TextView
    android:id="@+id/feedLabel"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/feedPageLogo"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/feed"
    android:textColor="@color/white" />

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ButtonsLayout_feed"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >

    <Button
        android:id="@+id/feedButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/feed"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/iWantButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/iwant"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/shareButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/share"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/profileButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/profile"
        android:textColor="@color/black" />
</LinearLayout>

<ListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/feedListView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/ButtonsLayout_feed"
    android:layout_below="@id/feedLabel"
    android:textSize="15dp" >
</ListView>

3番目のビュー(EditText)は、フォーカスがある場所です。


xmlコードを投稿できますか。
user1213202 2012年

回答:


177

最善の解決策は、プロジェクトマニフェストファイル(AndroidManifest.xml)にあり、activity構成に次の属性を追加します

android:windowSoftInputMode = "stateHidden"


例:

    <activity android:name=".MainActivity" 
              android:windowSoftInputMode="stateHidden" />

説明:

  • アクティビティがユーザーの注意の焦点になったときのソフトキーボードの状態(非表示か表示か)。
  • アクティビティのメインウィンドウに加えられた調整—ソフトキーボード用のスペースを確保するためにサイズを小さくするか、ウィンドウの一部がソフトキーボードで覆われているときにコンテンツがパンして現在のフォーカスが表示されるかどうか。

導入:

  • APIレベル3。

ドキュメントへのリンク

注: ここで設定された値(「stateUnspecified」および「adjustUnspecified」以外)は、テーマで設定された値をオーバーライドします。


3
アクティビティにテキストフィールドが混在している場合、このアプローチは失敗します。キーボードが必要なものとそうでないものがあります。このようなシナリオでテキストフィールドごとにこれを実現する方法については、私の回答を参照してください。
slogan621 2017

@ slogan621ここで質問を理解するのに少し時間を割いてください。あなたは別の接線にいます!
スカイネット2017

1
最近アプリを開いても動作しません。
Mohd Naushad

83

EditTextの上に、「偽の」フォーカスをとるビューを作成する必要があります。

何かのようなもの :

<!-- Stop auto focussing the EditText -->
<LinearLayout
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@android:color/transparent"
    android:focusable="true"
    android:focusableInTouchMode="true">
</LinearLayout>

<EditText
    android:id="@+id/searchAutoCompleteTextView_feed"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:inputType="text" />

この場合、LinearLayoutを使用してフォーカスを要求しました。お役に立てれば。

これは完璧に機能しました... Zaggo0のおかげで


26
役に立たないビューを追加することは、アクティビティのマニフェストエントリにandroid:windowSoftInputMode = "stateHidden"を追加することと比較して、次善の解決策です。
クリス・ホーナー

アクティビティまたはレイアウトに指定する必要がある両方の@ChrisHorner ...は同じ厄介なことです..どちらもこのソリューションでうまく機能します。
Nicolas Jafelle 2013

2
私はすべての解決策を試しましたが、これが正しく機能している唯一の解決策です!明確かつ簡単に感謝します
alfo888_ibg 2013

@ChrisHornerが言ったように、役に立たないビューを追加することはお勧めできません。彼の提案に従ってマニフェストファイルに属性を追加するか、このコード行をアクティビティに追加してください InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
aB9 2015

1
ビュー階層のそのような悪い実装!なるべく避けるべきだと思います。
sud007 2017

43
     edittext.setShowSoftInputOnFocus(false);

これで、好きなカスタムキーボードを使用できます。


おかげで、これは私のために働くここで唯一の解決策です+それは短くて簡単です。
最大O. 2016年

20
APIレベル21から利用可能
Jithu PS 2016

これが私が探していたものです。
SanjayJoshi18年

@ JithuP.S、APIレベルが19のKarbonチタンで動作しているのはなぜですか?
少金寶漢子2018

23

人々はここで多くの素晴らしい解決策を提案しましたが、私はEditTextでこの単純な手法を使用しました(javaとAnroidManifest.xmlには何も必要ありません)。EditTextで直接focusableとfocusableInTouchModeをfalseに設定するだけです。

 <EditText
        android:id="@+id/text_pin"
        android:layout_width="136dp"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textAlignment="center"
        android:inputType="numberPassword"
        android:password="true"
        android:textSize="24dp"
        android:focusable="false"
        android:focusableInTouchMode="false"/>

ここでの私の意図は、ユーザーにPINの入力を求め、カスタムPINパッドを表示したいアプリロックアクティビティでこの編集ボックスを使用することです。Android Studio2.1でminSdk = 8およびmaxSdk = 23でテスト済み

ここに画像の説明を入力してください



20

アクティビティクラスに以下のコードを追加します。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

ユーザーがEditTextをクリックすると、キーボードがポップアップ表示されます


9

オンスクリーンキーボードを無効にするには、次のコードを使用できます。

InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(editText.getWindowToken(), 0);

1
EditText.onClick(im.unhideSoftInputFromWindow(editText.getWindowToken()、0);)またはそのようなものを使用して再度有効にすることができますか?
イエバエ2012年

8

2つの簡単な解決策:

最初のソリューションは、マニフェストxmlファイルのコード行の下に追加されます。マニフェストファイル(AndroidManifest.xml)で、アクティビティ構成に次の属性を追加します

android:windowSoftInputMode = "stateHidden"

例:

<activity android:name=".MainActivity" 
          android:windowSoftInputMode="stateHidden" />

2番目の解決策は、アクティビティに以下のコード行を追加することです

//Block auto opening keyboard  
  this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

上記の任意の1つのソリューションを使用できます。ありがとう


5

InputMethodManagerのグローバル変数を宣言します。

 private InputMethodManager im ;

onCreate()の下でそれを定義します:

 im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 im.hideSoftInputFromWindow(youredittext.getWindowToken(), 0);

onClickListenerをoncreate()内の編集テキストに設定します。

 youredittext.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        im.showSoftInput(youredittext, InputMethodManager.SHOW_IMPLICIT);
    }
});

これは機能します。


コードを投稿してください。実行中に何が得られますか。
AndroGeek 2012年

すべてのコードが問題になっています。編集テキストをクリックしても画面上のキーパッドが表示されません
Housefly 2012年

エミュレーターまたはデバイスを使用してこれをテストしていますか?エミュレータを使用して試している場合は、ソフトキーを取得できません。デバイスを使用してテストします。それが動作します。
AndroGeek 2012年

ええ、私はテストにデバイスを使用しています
Housefly 2012年

うーん、それは奇妙です。あなたがあなたのコード、あなたが書いた方法を投稿することができれば、それはいくつかの助けになるかもしれません。それ以外の場合、上記のコードは私のデバイスで完全に正常に機能しています。
AndroGeek 2012年

4

次のコードを使用して、以下に記述します onCreate()

InputMethodManager inputManager = (InputMethodManager)
                                   getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                   InputMethodManager.HIDE_NOT_ALWAYS);         
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

4

それを試してください.......私はコードを使用してこの問題を解決します:-

EditText inputArea;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
inputArea = (EditText) findViewById(R.id.inputArea);

//This line is you answer.Its unable your click ability in this Edit Text
//just write
inputArea.setInputType(0);
}

デフォルトの電卓では何も入力できませんが、任意の文字列を設定できます。

それを試してみてください


3

良い解決策をありがとう@AB

    android:focusableInTouchMode="false"

この場合、編集テキストでキーボードを無効にする場合は、edittextタグラインにandroid: focusableInTouchMode = "false"を追加するだけです。

Android Studio 3.0.1 minsdk 16、maxsdk26で動作します


1
これはA.B答えへのコメントですか?それとも元の質問への答えですか?これがA.B回答へのコメントである場合は、StackOverflowが提供するコメントオプションを使用して、元の質問に対するこの回答を削除する必要があります。
David Walschots 2018年

解決した答えに答えるのがわからなかったらごめんなさい。私は私の問題を解決するための良い答えをABに感謝します..私が間違っている場合、私はその答えを削除することができます、申し訳ありません@DavidWalschots。
NZXT 2018年

2

これで試してください:

EditText yourEditText= (EditText) findViewById(R.id.yourEditText); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT); 

閉じるには、次を使用できます。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
 imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0); 

コードで次のように試してください。

ed = (EditText)findViewById(R.id.editText1);

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
imm.hideSoftInputFromWindow(ed.getWindowToken(), 0);  

ed.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
        imm.showSoftInput(ed, InputMethodManager.SHOW_IMPLICIT);  
    }
});

以前と同じように機能しています....レイアウトで行う必要のある変更はありますか?このEditTextビューの場合??
イエバエ2012年

クリッカブル=「true」のアンドロイド:cursorVisible =「false」のアンドロイド:大丈夫、今では...アンドロイド少数のレイアウト属性を追加した後に動作フォーカス可能=「false」をありがとう
イエバエ

いいえ。1つのことを行います。edittext.setOnFocusChangeListener()メソッドでキーボードコードを非表示にして、試してみてください
user1213202 2012年

これは、hideSoftInputの呼び出しをいつ使用するかを正確に指定できる場合の解決策になります。onCreateとonResumeの後にキーボードが自動的にポップアップします
ahmet emrah 2012

2

ええと、私は同じ問題を抱えていて、XMLファイルでフォーカス可能なものに取り組んだだけです。

<EditText
            android:cursorVisible="false"
            android:id="@+id/edit"
            android:focusable="false"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

あなたはおそらくセキュリティも探しています。これもその助けになります。


1

onCreate()メソッドで次のコードを使用します-

    editText = (EditText) findViewById(R.id.editText);
    editText.requestFocus();
    editText.postDelayed(new Runnable() {
        public void run() {
            InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            keyboard.hideSoftInputFromWindow(
                    editText.getWindowToken(), 0);
        }
    }, 200);

1

あなたがする必要があるのはandroid:focusableInTouchMode="false"、xmlのEditTextに追加することだけです(それでも誰かが簡単な方法でそれを行う方法を知る必要がある場合)


1

Xamarinユーザーの場合:

[Activity(MainLauncher = true, 
        ScreenOrientation = ScreenOrientation.Portrait, 
        WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop

1
       <TextView android:layout_width="match_parent"
                 android:layout_height="wrap_content"

                 android:focusable="true"
                 android:focusableInTouchMode="true">

                <requestFocus/>
      </TextView>

      <EditText android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

1

Xamarinを使用している場合は、これを追加できます

Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]

その後、OnCreate()メソッドでこの行を追加できます

youredittext.ShowSoftInputOnFocus = false;

ターゲットデバイスが上記のコードをサポートしていない場合は、EditTextクリックイベントで以下のコードを使用できます

InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService);
Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);

1

次のパターンは、入力を取得するためのダイアログを表示したいコードでうまく機能することがわかりました(たとえば、テキストフィールドに表示される文字列は、ダイアログのチェックボックスのリストから行われた選択の結果であり、キーボードから入力したテキスト)。

  1. 編集フィールドでソフト入力フォーカスを無効にします。同じレイアウトでキーボードを使用したい編集フィールドがあるため、アクティビティ全体を無効にすることはできません。
  2. テキストフィールドを最初にクリックするとフォーカスが変更され、クリックを繰り返すとクリックイベントが発生します。したがって、両方をオーバーライドします(ここでは、両方のハンドラーが同じことを行うことを示すためにコードをリファクタリングしません):

    tx = (TextView) m_activity.findViewById(R.id.allergymeds);
    if (tx != null) {
        tx.setShowSoftInputOnFocus(false);
        tx.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if (hasFocus) {
                    MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
                    mld.setPatientId(m_sess.getActivePatientId());
                    mld.show(getFragmentManager(), "Allergy Medications Dialog");
                }
            }
        });
        tx.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
                mld.setPatientId(m_sess.getActivePatientId());
                mld.show(getFragmentManager(), "Allergy Medications Dialog");
            }
        });
    }
    

0

私が作成していたAndroidアプリでは、3つEditTextのがLinearLayout水平に配置されていました。フラグメントがロードされたときにソフトキーボードが表示されないようにする必要がありました。に設定focusablefocusableInTouchModeてtrueに設定することに加えてLinearLayout、に設定descendantFocusabilityする必要がありましたblocksDescendants。でonCreate、私requestFocusLinearLayout。これにより、フラグメントの作成時にキーボードが表示されなくなりました。

レイアウト -

    <LinearLayout
       android:id="@+id/text_selector_container"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:weightSum="3"
       android:orientation="horizontal"
       android:focusable="true"
       android:focusableInTouchMode="true"
       android:descendantFocusability="blocksDescendants"
       android:background="@color/black">

       <!-- EditText widgets -->

    </LinearLayout>

onCreate-mTextSelectorContainer.requestFocus();


0

それでも誰かが最も簡単な解決策を探している場合はtrue、親レイアウトで次の属性をに設定します

android:focusableInTouchMode="true"

例:

<android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="true">

.......
......
</android.support.constraint.ConstraintLayout>

反対票を投じる前に、あなたの議論にコメントしてください!
Ajmal Salim 2017年

0

これを使用して、EditText ...を有効または無効にします。

InputMethodManager imm;

imm = (InputMethodManager)
getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);

if (isETEnable == true) {

    imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
    ivWalllet.setImageResource(R.drawable.checkbox_yes);
    etWalletAmount.setEnabled(true);
    etWalletAmount.requestFocus();
    isETEnable = false;
    } 
else {

    imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0);
    ivWalllet.setImageResource(R.drawable.checkbox_unchecked);
    etWalletAmount.setEnabled(false);
    isETEnable = true;
    }

0

この答えを試してください、

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setTextIsSelectable(true);

注:API11以降のみ


0
private InputMethodManager imm;

...


editText.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.onTouchEvent(event);
        hideDefaultKeyboard(v);
        return true;
    }
});

private void hideDefaultKeyboard(View et) {
  getMethodManager().hideSoftInputFromWindow(et.getWindowToken(), 0);
}

private InputMethodManager getMethodManager() {
        if (this.imm == null) {
            this.imm = (InputMethodManager)  getContext().getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
        }
  return this.imm;
}

-1

アクティビティでのテキストビューの場合(またはandroid:layout_width = "0dp" android:layout_height = "0dp"で偽の空のtextfiewを作成する)、次にこのテキストビューに追加します:android:textIsSelectable = "true"


-1

シンプルで、xmlファイルから「」タグを削除するだけです


2
これについて詳しく説明し、例を示してください。回答方法をご覧ください。
バグ

-1

android:focusable="false"特にEditTextレイアウトxmlにプロパティを追加する必要があります。次に、EditTextキーパッドのポップアップなしでクリックリストナーを作成できます。


-1

この問題は、editText inputTypeを任意の値に設定する必要はなく、次の行editText.setTextIsSelectable(true);を追加するだけで並べ替えることができます。


ねえ、答えを書いてくれてありがとう!ただし、ここにはすでに非常に多くの回答があるため、これを独自の回答にするのではなく、実際にRanjithKumarの回答に対するコメントとして書き込んだ方が役立つ場合があります。除外した場合の効果について言及することも興味深いかもしれませんinputType。しかし、私が他の答えを選んだかどうかを知るのは良いことのように見えるので、これを独自の答えとして維持することを主張する場合でも、とにかくそこにコメントを残すことを検討してください。
マーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.