我要做的是截取外部类的Back按钮,如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的主要活动中添加了这样的内容:
RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main_layout);
mainLayout.addView(new AnswerView(this));
Run Code Online (Sandbox Code Playgroud)
为了使View能够接收任何需要关注的事件.我没有看到任何XML,所以让我们在运行时添加几个特性:
AnswerView layout = new AnswerView(this);
layout.setFocusableInTouchMode(true);
layout.requestFocus();
mainLayout.addView(layout);
Run Code Online (Sandbox Code Playgroud)
现在你的布局将拦截你的后退按钮OnKeyListener.但是如果另一个View具有焦点,即使是子视图,该事件也可能首先由孩子使用.
要理解这一点,请在AnswerView中添加EditText:
layout.addView(new EditText());
Run Code Online (Sandbox Code Playgroud)
如果在EditText具有焦点时单击后退按钮:第一次单击关闭软键盘,第二次单击将像正常一样完成当前活动.OnKeyListener默认情况下,事件不会通过View层次结构传递.
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |