これがわかりません。一部のアプリにはEditText(テキストボックス)があり、タッチするとオンスクリーンキーボードが表示され、キーボードにはEnterキーの代わりに[Search]ボタンが表示されます。
これを実装したい。そのSearchボタンを実装してSearchボタンが押されたことを検出する方法
編集:検索ボタンの実装方法を見つけました。 XMLではAndroid:imeOptions="actionSearch"
、JavaではEditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
です。しかし、その検索ボタンを押したユーザーをどのように処理すればよいでしょうか。 Android:imeActionId
と関係がありますか?
レイアウトで、入力方法のオプションを検索に設定します。
<EditText
Android:imeOptions="actionSearch"
Android:inputType="text" />
Javaでエディタアクションリスナを追加します。
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
performSearch();
return true;
}
return false;
}
});
ユーザーが検索をクリックしたときにキーボードを隠すRobby Pondの回答に追加
private void performSearch() {
editText.clearFocus();
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
//...perform search
}
xml
ファイルに、imeOptions="actionSearch"
およびinputType="text"
、maxLines="1"
を配置します。
<EditText
Android:id="@+id/search_box"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/search"
Android:imeOptions="actionSearch"
Android:inputType="text"
Android:maxLines="1" />
コトリンで
evLoginPassword.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
doTheLoginWork()
}
true
}
部分的なXMLコード
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="8dp"
Android:layout_marginTop="8dp"
Android:paddingLeft="24dp"
Android:paddingRight="24dp">
<EditText
Android:id="@+id/evLoginUserEmail"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/email"
Android:inputType="textEmailAddress"
Android:textColor="@color/black_54_percent" />
</Android.support.design.widget.TextInputLayout>
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="8dp"
Android:layout_marginTop="8dp"
Android:paddingLeft="24dp"
Android:paddingRight="24dp">
<EditText
Android:id="@+id/evLoginPassword"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/password"
Android:inputType="textPassword"
Android:imeOptions="actionDone"
Android:textColor="@color/black_54_percent" />
</Android.support.design.widget.TextInputLayout>
</LinearLayout>
この答えはTextInputEditTextのためのものです:
レイアウトXMLファイルで、入力方式オプションを必要なタイプに設定します。例えばdoneです。
<com.google.Android.material.textfield.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<com.google.Android.material.textfield.TextInputEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:imeOptions="actionGo"/>
同様に、imeOptionsをactionSubmit、actionSearchなどに設定することもできます。
Javaでエディタアクションリスナを追加します。
textInputLayout.getEditText().setOnEditorActionListener(new
TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_GO) {
performYourAction();
return true;
}
return false;
}
});
Kotlinを使っているのなら:
textInputLayout.editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_GO) {
performYourAction()
}
true
}
xMLで:
<EditText
Android:id="@+id/search_edit"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/search"
Android:imeOptions="actionSearch"
Android:inputType="text" />
Javaによって:
editText.clearFocus();
InputMethodManager in = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);