创建一个自定义的EditText,像下面这样带有一个接口:
public class CustomEditText extends EditText {
public void setHandleDismissingKeyboard(
handleDismissingKeyboard handleDismissingKeyboard) {
this.handleDismissingKeyboard = handleDismissingKeyboard;
}
private handleDismissingKeyboard handleDismissingKeyboard;
public interface handleDismissingKeyboard {
public void dismissKeyboard();
}
@SuppressLint("NewApi")
public CustomEditText(Context context, AttributeSet attrs,
int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public CustomEditText(Context context) {
super(context);
}
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_UP) {
handleDismissingKeyboard.dismissKeyboard();
return true;
}
return super.dispatchKeyEvent(event);
}
那么在您的活动中创建并初始化您的CustomEditText,然后使用:
customEditText.setHandleDismissingKeyboard(this);
然后实现类并覆盖方法,将你的代码放在其中。
如果想了解更多关于我的回答的信息,你需要的所有东西都是onKeyPreIme
,你可以在你的EditText类中重写它(就像我为你发布的那样),来处理所有键盘上的按键,例如返回键或任何其他键盘按键。
我在自定义类中放了一个内部接口,用于从该类到你想要的每个活动或类中获取回调。你也可以使用静态方法实现这一点,如果你希望防止键盘消失,只需在其中返回true
即可。
要使用CustomEditText
,你可以在xml中使用它,也可以在java代码中定义和初始化它,就像其它小部件(按钮、文本视图等)一样。唯一的区别是你需要像下面这样在你的xml中定义它:
<yourPackage.CustomEditText ..... />