5

我想在显示软键盘时覆盖后退按钮。基本上,当按下后退按钮时,我希望键盘关闭,并且我想将一些文本附加到用户在该编辑文本字段中键入的任何内容上。所以基本上我需要知道键盘何时被关闭。搜索后,我意识到没有用于此的 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 消息来测试它是否有效,但是当我点击后退按钮时,它会打印两次,有什么理由这样做吗?

任何帮助将非常感激!!

4

2 回答 2

5

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

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

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

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

dispatchKeyEventPreIme

于 2012-08-15T08:28:17.743 回答
3

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

于 2012-08-15T08:31:13.433 回答