Android EditText를 사용할 때 IME의 Key Event 및 EditorAction(ViewPager에서 사용할 때 고려 사항)
KeyEvent
① 및 ② Arrow 아이콘의 버튼은 TextView에서 다음 이벤트를 발행합니다.
Event property
Value
Value
ActionKeyEvent.ACTION_DOWN
KeyEvent.UP
KeyCodeKeyEvent.KEYCODE_DPAD_LEFT
KeyEvent.KEYCODE_DPAD_RIGHT
따라서 사건을 이렇게 처리할 수 있다. binding.editText.setOnKeyListener { _, _, event ->
if (event.action != KeyEvent.ACTION_DOWN) {
return@setOnKeyListener false
}
return@setOnKeyListener when (event.keyCode) {
KeyEvent.KEYCODE_DPAD_LEFT -> {
// handle when Push left arrow icon button.
false
}
KeyEvent.KEYCODE_DPAD_RIGHT -> {
// handle when Push right arrow icon button.
false
}
else -> {
true
}
}
}
EditorAction
③ 동작을 하고 싶을 때 사용EditorActionListener
binding.editText.setOnEditorActionListener { _, actionId, _ ->
return@setOnEditorActionListener when(actionId) {
EditorInfo.IME_ACTION_DONE -> {
// Handle when pushed done button(right bottom)
true
}
else -> {
false
}
}
}
파라미터가 이 사건을 따로 전파할 지 여부입니다.true
를 통해 전파될 경우 Focus는 다음 Focuusable View로 이동합니다.
오른쪽 아래 아이콘은 할 수 있는 모양입니다.
지정하려는 경우android:imeOptions="send"
처럼.
https://developer.android.com/reference/android/view/inputmethod/EditorInfo#imeOptions
ViewPager에서 사용할 때 고려 사항
여기 반했어...
ViewParger는 페이지 전환에 KeyEvent Intercept를 사용합니다.
따라서 ViewPager에 EditText를 표시하고 IME를 표시한 상태에서 좌우 ① 또는 ②의 단추를 눌렀을 때 페이지 전환
/**
* You can call this function yourself to have the scroll view perform
* scrolling from a key event, just as if the event had been dispatched to
* it by the view hierarchy.
*
* @param event The key event to execute.
* @return Return true if the event was handled, else false.
*/
public boolean executeKeyEvent(@NonNull KeyEvent event) {
boolean handled = false;
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_LEFT:
if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
handled = pageLeft();
} else {
handled = arrowScroll(FOCUS_LEFT);
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
handled = pageRight();
} else {
handled = arrowScroll(FOCUS_RIGHT);
}
break;
case KeyEvent.KEYCODE_TAB:
if (event.hasNoModifiers()) {
handled = arrowScroll(FOCUS_FORWARD);
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
handled = arrowScroll(FOCUS_BACKWARD);
}
break;
}
}
return handled;
}
전환하지 않으려면 반환값setOnKeyListener
이 가짜 방식으로 전파되지 않습니다.
Reference
이 문제에 관하여(Android EditText를 사용할 때 IME의 Key Event 및 EditorAction(ViewPager에서 사용할 때 고려 사항)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t-kurimura/items/e777d76879f6222c2d31
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
binding.editText.setOnKeyListener { _, _, event ->
if (event.action != KeyEvent.ACTION_DOWN) {
return@setOnKeyListener false
}
return@setOnKeyListener when (event.keyCode) {
KeyEvent.KEYCODE_DPAD_LEFT -> {
// handle when Push left arrow icon button.
false
}
KeyEvent.KEYCODE_DPAD_RIGHT -> {
// handle when Push right arrow icon button.
false
}
else -> {
true
}
}
}
③ 동작을 하고 싶을 때 사용
EditorActionListener
binding.editText.setOnEditorActionListener { _, actionId, _ ->
return@setOnEditorActionListener when(actionId) {
EditorInfo.IME_ACTION_DONE -> {
// Handle when pushed done button(right bottom)
true
}
else -> {
false
}
}
}
파라미터가 이 사건을 따로 전파할 지 여부입니다.true
를 통해 전파될 경우 Focus는 다음 Focuusable View로 이동합니다.오른쪽 아래 아이콘은 할 수 있는 모양입니다.
지정하려는 경우
android:imeOptions="send"
처럼.https://developer.android.com/reference/android/view/inputmethod/EditorInfo#imeOptions
ViewPager에서 사용할 때 고려 사항
여기 반했어...
ViewParger는 페이지 전환에 KeyEvent Intercept를 사용합니다.
따라서 ViewPager에 EditText를 표시하고 IME를 표시한 상태에서 좌우 ① 또는 ②의 단추를 눌렀을 때 페이지 전환
/**
* You can call this function yourself to have the scroll view perform
* scrolling from a key event, just as if the event had been dispatched to
* it by the view hierarchy.
*
* @param event The key event to execute.
* @return Return true if the event was handled, else false.
*/
public boolean executeKeyEvent(@NonNull KeyEvent event) {
boolean handled = false;
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_LEFT:
if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
handled = pageLeft();
} else {
handled = arrowScroll(FOCUS_LEFT);
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
handled = pageRight();
} else {
handled = arrowScroll(FOCUS_RIGHT);
}
break;
case KeyEvent.KEYCODE_TAB:
if (event.hasNoModifiers()) {
handled = arrowScroll(FOCUS_FORWARD);
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
handled = arrowScroll(FOCUS_BACKWARD);
}
break;
}
}
return handled;
}
전환하지 않으려면 반환값setOnKeyListener
이 가짜 방식으로 전파되지 않습니다.
Reference
이 문제에 관하여(Android EditText를 사용할 때 IME의 Key Event 및 EditorAction(ViewPager에서 사용할 때 고려 사항)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t-kurimura/items/e777d76879f6222c2d31
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/**
* You can call this function yourself to have the scroll view perform
* scrolling from a key event, just as if the event had been dispatched to
* it by the view hierarchy.
*
* @param event The key event to execute.
* @return Return true if the event was handled, else false.
*/
public boolean executeKeyEvent(@NonNull KeyEvent event) {
boolean handled = false;
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_LEFT:
if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
handled = pageLeft();
} else {
handled = arrowScroll(FOCUS_LEFT);
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
handled = pageRight();
} else {
handled = arrowScroll(FOCUS_RIGHT);
}
break;
case KeyEvent.KEYCODE_TAB:
if (event.hasNoModifiers()) {
handled = arrowScroll(FOCUS_FORWARD);
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
handled = arrowScroll(FOCUS_BACKWARD);
}
break;
}
}
return handled;
}
Reference
이 문제에 관하여(Android EditText를 사용할 때 IME의 Key Event 및 EditorAction(ViewPager에서 사용할 때 고려 사항)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t-kurimura/items/e777d76879f6222c2d31텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)