こんにちは、検索されたEditText
と検索_Button
を持っています。検索したテキストを入力するとき、検索機能を有効にするために、検索Button
の代わりにENTERキーをソフトキーボードで使用したいと思います。
事前に助けてくれてありがとう。
それには、OnKeyListener
にEditText
を設定します。
これが私のコードのサンプルです。 EditText
というaddCourseText
という名前があり、Enterキーまたはd-padがクリックされたときに関数addCourseFromTextBox
を呼び出します。
addCourseText = (EditText) findViewById(R.id.clEtAddCourse);
addCourseText.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
addCourseFromTextBox();
return true;
default:
break;
}
}
return false;
}
});
<EditText
Android:id="@+id/search"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:hint="@string/search_hint"
Android:inputType="text"
Android:imeOptions="actionSend" />
その後、EditText要素のTextView.OnEditorActionListenerを定義することにより、アクションボタンの押下をリッスンできます。リスナーで、IME_ACTION_SENDなど、EditorInfoクラスで定義された適切なIMEアクションIDに応答します。例えば:
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
sendMessage();
handled = true;
}
return handled;
}
});
ソース: https://developer.Android.com/training/keyboard-input/style.html
次のように、EditTextに属性を追加できます。
Android:imeOptions="actionSearch"
android:imeOptions = "actionSearch"のようなEditTextに属性を追加します
これは機能を実行する最良の方法です
また、imeOptionsには、「go」、「next」、「done」などの他の値もあります。
Kotlin lambdaも使用できます
editText.setOnKeyListener { _, keyCode, keyEvent ->
if (keyEvent.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
Log.d("Android view component", "Enter button was pressed")
return@setOnKeyListener true
}
return@setOnKeyListener false
}
これは、アプリの処理方法のサンプルです
//searching for the Edit Text in the view
final EditText myEditText =(EditText)view.findViewById(R.id.myEditText);
myEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN)
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
(keyCode == KeyEvent.KEYCODE_ENTER)) {
//do something
//true because you handle the event
return true;
}
return false;
}
});
次の編集可能なフィールド(ある場合)にフォーカスが移動しないようにするには、キーダウンイベントを無視し、キーアップイベントを処理することができます。また、わずかに効率的であると想定して、keyCodeで最初にフィルタリングすることも好みます。ところで、trueを返すということは、イベントを処理したことを意味し、他のリスナーは処理しないことを忘れないでください。とにかく、ここに私のバージョンがあります。
ETFind.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER
|| keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// do nothing yet
} else if (event.getAction() == KeyEvent.ACTION_UP) {
findForward();
} // is there any other option here?...
// Regardless of what we did above,
// we do not want to propagate the Enter key up
// since it was our task to handle it.
return true;
} else {
// it is not an Enter key - let others handle the event
return false;
}
}
});