2012-08-15 85 views
5

我要重写后退按钮显示软键盘时。基本上当返回按钮被击中,我想键盘辞退了,我要追加一些文字上的任何用户在编辑文本字段中键入。所以基本上我需要知道键盘何时被解雇。在四处搜寻之后,我意识到这没有API,唯一真正的方法就是制作EditText类。的Android定制的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消息来测试它的工作原理,但是当我打的返回按钮,它打印了两次,任何理由为什么它会是这样?

任何帮助将不胜感激!

回答

5

这是由于在ACTION_DOWNACTION_UP上都调用了dispatchKeyEventPreIme。
您将有键按下时按下时,只处理。因此,使用

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

编辑: 关于第一个问题,您可以在dispatchKeyEventPreIme

+0

啊,傻了,应该已经意识到了。但是关于我的另一个问题。你知道当键盘被解散时我怎样将文本传递给EditText字段吗? – AdamM 2012-08-15 08:33:30

+0

检查编辑。 – nandeesh 2012-08-15 08:35:21

+0

这样一个简单的修复。非常感谢,完美的作品! – AdamM 2012-08-15 08:38:13

3

为什么两次做

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

?可能该方法被称为按下和向上事件。