我想在显示软键盘时覆盖后退按钮。基本上当后退按钮被击中时,我希望键盘被忽略,并且我想在用户在该编辑文本字段中键入的内容上附加一些文本。所以基本上我需要知道什么时候键盘被解雇。在搜索之后,我意识到没有这方面的API,并且唯一真正的方法是创建EditText类。
所以我创建了自己的EditText类并像这样扩展了EditText
public class CustomEditText extends EditText
{
public CustomEditText(Context context)
{
super(context);
init();
}
public CustomEditText(Context context, AttributeSet attrs)
{
super(context, attrs);
init();
}
public CustomEditText(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
init();
}
private void init()
{
}
}
我也添加了这个方法
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event)
{
if (KeyEvent.KEYCODE_BACK == event.getKeyCode())
{
Log.v("", "Back Pressed");
//Want to call this method which will append text
//init();
}
return super.dispatchKeyEventPreIme(event);
}
现在这个方法覆盖了后退按钮,它关闭了键盘,但我不知道如何将文本传递到EditText字段。有谁知道我会怎么做?
另一个快速问题,有谁知道为什么这个方法被调用两次?正如你可以看到的那样,我已经添加了一个快速的logcat消息来测试它的工作原理,但是当我点击后退按钮时,它会打印两次,这是为什么它会这样做的?
任何帮助都将非常感谢!!
答案 0 :(得分:5)
这是由于在ACTION_DOWN和ACTION_UP上调用了dispatchKeyEventPreIme。 只有在按下KEY键时才需要处理。所以使用
if(event.getAction () == KeyEvent.ACTION_DOWN)
编辑: 对于你可以做的第一个问题
setText(getText().toString() + " whatever you want to append");
dispatchKeyEventPreIme
中的
答案 1 :(得分:3)
为什么两次?可能是按下向上和向上事件调用该方法。