从View或外部类覆盖后退按钮

时间:2012-09-12 16:40:03

标签: android

我要做的是截取外部类的后退按钮,如下所示:

public class AnswerView extends RelativeLayout {

    public AnswerView(Context context) {
        super(context);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
            Log.i("AlleAntwoorden", "Back button pressed!");
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

我在我的主要活动中添加了这样的内容:

RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main_layout);
mainLayout.addView(new AnswerView(this));

1 个答案:

答案 0 :(得分:7)

为了让View接收任何需要关注的事件。我没有看到任何XML,所以让我们在运行时添加几个特性:

AnswerView layout = new AnswerView(this);
layout.setFocusableInTouchMode(true);
layout.requestFocus();
mainLayout.addView(layout);

现在,您的布局将拦截OnKeyListener中的后退按钮。但是如果另一个View具有焦点,即使是子视图,该事件也可能首先由孩子使用 要理解这一点,请在AnswerView中添加EditText:

layout.addView(new EditText());

如果在EditText具有焦点时单击后退按钮:第一次单击关闭软键盘,第二次单击将像正常一样完成当前活动。默认情况下,OnKeyListener事件不会通过View层次结构传递。

相关问题