web-dev-qa-db-ja.com

Android:EditTextはキーボードを自動的にオンにしますが、停止するにはどうすればよいですか?

以下に定義されているEditTextの上に単純なListViewがあります。

アプリを実行すると、EditTextが選択され、キーボードが表示されます。

私はそれが起こらないようにしたい。デフォルトで選択したり、キーボードを表示したりしたくありません。

<EditText
    Android:id="@+id/search_box"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:hint="type to search titles"
    Android:inputType="text"
    Android:maxLines="1"
    Android:capitalize="none"
    Android:linksClickable="false"
    Android:autoLink="none"
    Android:autoText="true"
    Android:singleLine="true" />
<ListView
    Android:id="@+id/DetailsListView"
    Android:layout_width="fill_parent"
    Android:layout_height="0dip"
    Android:layout_weight="1"
    Android:background="@color/transparent"
    Android:cacheColorHint="@color/transparent"
    Android:listSelector="@drawable/list_selector"
    Android:fastScrollEnabled="true" />
17
Ian Vink

私はこれが解決策であることがわかりました:

Window.SetSoftInputMode (SoftInput.StateAlwaysHidden);

注:これはC#であり、Androidの場合はJava

13
Ian Vink

まず、タグはモノドロイドであるため、C#上にあるため、受け入れられた答えは正しいです。

しかし、作者が望んでいることではありません...このトリックはキーボードを非表示にするだけですが、editTextにはまだ焦点があります。

Javaとc#の両方でこれを行うには、これをルートレイアウトに配置する必要があります:

Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"

例えば ​​:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="@color/white"
    Android:descendantFocusability="beforeDescendants"
    Android:focusableInTouchMode="true"
              >
....
</LinearLayout>
29
Dahevos

これをonCreateに追加します

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
8
Kevin Parker

レイアウトでこれを試してください

<EditText
                    Android:id="@+id/myid2"
                    Android:layout_width="fill_parent"
                    Android:layout_height="wrap_content"
                    Android:layout_below="@id/myid1"
                    Android:clickable="true"
                    Android:cursorVisible="false"
                    Android:focusable="false"
                    Android:hint="@string/hint"
                    Android:singleLine="true"
                    Android:textColor="@color/black"
                    Android:textSize="15dp" />

そしてこれをあなたのコードに

    myEditText.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_UP) {
                //do tasks
            }
            return false;
        }
    });

私はそれが何か役に立つかどうかわかりません。私はそれが何をするのかさえ知りません。しかし、それは私にとって同様の問題を解決しました。私があなたの時間を無駄にしたらsry

4
Housefly

私は私の解決策を見つけました、あなたはこれを試すことができます、そしてそれは完璧に働きます。

xml(defualtでeditText focusableInTouchModeをfalseに設定):

       <EditText ... Android:focusableInTouchMode="false" .../>

そして、Java:にタッチした後、focusableInTouchModeを変更しました。

        yourEditText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            yourEditText.setFocusableInTouchMode(true);
            return false;
        }
    });
1
Alex

Android:windowSoftInputMode = "stateHidden"が機能しませんでした。要素のフォーカスやその他のテクニックをいじり回すこともありませんでした(enabled = falseとして設定してもキーボードが表示されます)。

私の解決策:hideKeyboard関数を作成します:

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

そして、テキストフィールドをホストしているUIが表示されるたびにトリガーします。

ダイアログの場合:

 dialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            hideKeyboard();
        }

ウィジェットの場合:

@Override
public void setVisibility(int visibility) {
    super.setVisibility(visibility);
    hideKeyBoard();
}
0
TomDK