Android:为EditText打开键盘时处理后退按钮单击
Posted
技术标签:
【中文标题】Android:为EditText打开键盘时处理后退按钮单击【英文标题】:Android : Handle back button click when keyboard is open for EditText 【发布时间】:2022-01-07 00:21:24 【问题描述】:当我在 EdiText 中写东西并按下后退按钮时,它隐藏了键盘,这是完美的。但是我想在为 EditText 打开键盘时处理这个后退按钮单击。原因是我想在键盘打开时按下返回按钮时清除EditText的文本。
为 EditText 打开键盘时不会调用活动方法onBackPressed()
。
我检查了here,但没有帮助。
任何帮助将不胜感激。
【问题讨论】:
清除背面文字不是用户期望的行为。你不应该这样做。添加“清除”按钮,但不要将“返回”用于非“返回”的操作。 @Agent_L 不要专注于 UI/UX,如果您知道在键盘打开时处理后退按钮单击,请告诉我! 为什么不自定义视图示例:在视图旁边添加一个带有清晰图像的 ImageView。 @yansam 清除按钮已经存在。需要返回按钮来处理。 【参考方案1】:你可以使用自定义edittext并实现onKeyPreIme
来监听backPressed
public class MyEditText extends androidx.appcompat.widget.AppCompatEditText
private MyEditTextListener listener;
public interface MyEditTextListener
void callback();
public void setListener(MyEditTextListener listener)
this.listener = listener;
public MyEditText(Context context, AttributeSet attrs)
super(context, attrs);
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
listener.callback();
return true;
活动
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
MyEditText myEditText = findViewById(R.id.myEditText);
myEditText.setListener(new MyEditText.MyEditTextListener()
@Override
public void callback()
//handle backPressed event when keyboard have shown
);
【讨论】:
这个自定义编辑文本如何与活动一起使用?比如如何在活动/片段中使用 onKeyPreIme 方法? @KishanSolanki 我编辑我的答案你可以试试。 2 件事。 1. 活动的方法 onBackPressed() 一旦你专注于编辑文本就不会再次调用。 2.callback()方法调用了两次【参考方案2】:我对@GuanHongHuang 的回答做了一些修改,现在我可以通过这三个步骤来做到这一点:
1.创建自定义 EditText 类来处理 Back Press:
public class CustomEditTextWithBackPressEvent extends androidx.appcompat.widget.AppCompatEditText
private MyEditTextListener onBackPressListener;
public CustomEditTextWithBackPressEvent(Context context, AttributeSet attrs)
super(context, attrs);
public void setOnBackPressListener(MyEditTextListener onBackPressListener)
this.onBackPressListener = onBackPressListener;
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
if (keyCode == KeyEvent.KEYCODE_BACK &&
event.getAction() == KeyEvent.ACTION_UP)
//back button pressed
if (Objects.requireNonNull(ViewCompat.getRootWindowInsets(getRootView())).isVisible(WindowInsetsCompat.Type.ime()))
//keyboard is open
onBackPressListener.callback();
return false;
return super.dispatchKeyEvent(event);
public interface MyEditTextListener
void callback();
2。用 XML 中的 CustomEditTextWithBackPressEvent 替换您的普通 EditText
<CustomEditTextWithBackPressEvent
android:id="@+id/etSearch"
android:layout_
android:layout_
android:hint="@string/search_hint"
android:imeOptions="actionSearch"
android:inputType="text"
android:maxLines="1" />
3.处理后按:
binding.etSearch.setOnBackPressListener(() ->
//handle click
//your code here
);
【讨论】:
以上是关于Android:为EditText打开键盘时处理后退按钮单击的主要内容,如果未能解决你的问题,请参考以下文章