以下に定義されている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" />
私はこれが解決策であることがわかりました:
Window.SetSoftInputMode (SoftInput.StateAlwaysHidden);
注:これはC#であり、Androidの場合はJava
まず、タグはモノドロイドであるため、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>
これをonCreateに追加します
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
レイアウトでこれを試してください
<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
私は私の解決策を見つけました、あなたはこれを試すことができます、そしてそれは完璧に働きます。
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;
}
});
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();
}