92

私のアプリでは、すべての画面の最初のビューは 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) は、フォーカスがある場所です。

4

29 に答える 29

182

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

android:windowSoftInputMode="stateHidden"


例:

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

説明:

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

導入:

  • API レベル 3。

ドキュメントへのリンク

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

于 2012-12-17T04:53:39.890 に答える
84

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のおかげです

于 2012-05-16T07:44:42.467 に答える
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 Studio 2.1 で minSdk=8 および maxSdk=23 でテスト済み

ここに画像の説明を入力

于 2016-11-16T14:42:57.570 に答える
10

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

InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(editText.getWindowToken(), 0);
于 2012-05-16T04:06:21.857 に答える
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);

上記のいずれかのソリューションを使用できます。ありがとう

于 2016-10-17T04:45:00.597 に答える
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);
    }
});

これは機能します。

于 2012-05-16T06:06:52.567 に答える
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);
于 2012-05-18T07:02:38.437 に答える
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);  
    }
});
于 2012-05-16T04:14:55.017 に答える
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);
于 2014-06-07T10:41:30.723 に答える
0

私が作成していた Android アプリでは、水平に配置さEditTextれた 3 つの s がありました。LinearLayoutフラグメントが読み込まれたときにソフト キーボードが表示されないようにする必要がありました。focusableで とfocusableInTouchModeを true に設定するだけでなく、LinearLayoutに設定descendantFocusabilityする必要がありましたblocksDescendants。でonCreate、私は に電話requestFocusしましたLinearLayout。これにより、フラグメントの作成時にキーボードが表示されなくなりました。

レイアウト -

    <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();

于 2016-10-12T20:09:18.803 に答える
-1

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

于 2016-11-11T11:29:57.740 に答える