Android自定义EditText和后退按钮覆盖

时间:2012-08-15 08:10:50

标签: android override

我想在显示软键盘时覆盖后退按钮。基本上当后退按钮被击中时,我希望键盘被忽略,并且我想在用户在该编辑文本字段中键入的内容上附加一些文本。所以基本上我需要知道什么时候键盘被解雇。在搜索之后,我意识到没有这方面的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消息来测试它的工作原理,但是当我点击后退按钮时,它会打印两次,这是为什么它会这样做的?

任何帮助都将非常感谢!!

2 个答案:

答案 0 :(得分:5)

这是由于在ACTION_DOWNACTION_UP上调用了dispatchKeyEventPreIme。 只有在按下KEY键时才需要处理。所以使用

if(event.getAction () == KeyEvent.ACTION_DOWN)

编辑: 对于你可以做的第一个问题

setText(getText().toString() + " whatever you want to append"); 
dispatchKeyEventPreIme

中的

答案 1 :(得分:3)

为什么两次?可能是按下向上和向上事件调用该方法。