답변:
당신은 OnKeyListener
당신의 EditText
.
다음은 내 코드의 샘플입니다. Enter 키 또는 D- 패드를 클릭 할 때 함수를 호출 하는 EditText
이름 이 있습니다.addCourseText
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;
}
});
android:inputType="text"
은 캐리지 리턴이있는 기본 키보드에 비해 Enter 키를 표시하도록 편집 텍스트에 대한 xml을 설정할 수 있습니다 .
<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를 정의하여 작업 버튼의 누름을 수신 할 수 있습니다. 리스너에서 EditorInfo 클래스에 정의 된 적절한 IME 작업 ID (예 : IME_ACTION_SEND)에 응답합니다. 예를 들면 :
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:inputType="text"
뿐만 아니라
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
}
포커스가 다음 편집 가능한 필드 (있는 경우)로 이동하지 않으려면 키 다운 이벤트를 무시하고 키 업 이벤트를 처리 할 수 있습니다. 나는 또한 그것이 약간 더 효율적일 것이라고 가정하여 keyCode에서 먼저 필터링하는 것을 선호합니다. 참을 반환한다는 것은 이벤트를 처리했음을 의미하므로 다른 리스너는 처리하지 않습니다. 어쨌든, 여기 내 버전입니다.
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;
}
}
});
이것은 내 앱 중 하나의 샘플입니다.
//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;
}
});
이를 달성하는 가장 업데이트 된 방법은 다음과 같습니다.
XML의 EditText에 다음을 추가하십시오.
android:imeOptions="actionSearch"
그런 다음 활동 / 조각에서 :
EditText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// Do what you want here
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}