Android:如何让键盘输入按钮说“搜索”处理它的点击?

我想不通。一些应用程序有EditText(文本框)的帮助,当你触摸它时,它会弹出屏幕上的键盘,键盘上有一个“搜索”。按钮,而不是进入键。

我想实现这个。我如何实现搜索按钮并检测搜索按钮的按下?

编辑:找到如何实现搜索按钮;在XML中,android:imeOptions="actionSearch"或在Java中,EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);。但是如何处理用户按下搜索按钮的情况呢?它是否与android:imeActionId有关?

204597 次浏览

在布局中设置输入方法选项以搜索。

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

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" />

隐藏键盘时,用户点击搜索。除了罗比·庞德的回答

private void performSearch() {
editText.clearFocus();
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(editText.getWindowToken(), 0);
//...perform search
}

在芬兰湾的科特林

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>

通过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);

这个答案是TextInputEditText:

在布局XML文件中将输入法选项设置为所需的类型。例如完成

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/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"/>

& lt; / com.google.android.material.textfield.TextInputLayout>

类似地,你也可以将imeOptions设置为actionSubmit、actionSearch等

在java中添加编辑器动作监听器。

TextInputLayout textInputLayout = findViewById(R.id.textInputLayout);


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
}