【发布时间】:2016-11-05 23:55:24
【问题描述】:
目前我在按钮上有一个 OnTouchListener,它可以正常工作。代码如下:
Button button1 =(Button) findViewById(R.id.btOk1);
button1.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//do some stuff here
return false;
}
});
我希望在我的整个 Activity 上有一个 OnTouchListener,这样每当用户点击我的 Activity 的任何区域时我都会做一些事情。我的活动的根布局是一个 TableLayout。我该怎么做?
谢谢!
编辑:
我设法通过命名我的根布局并设置一个 onTouchListener 来使用,如下所示:
View view = findViewById(R.id.mylayout);
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Log.d(TAG, "onTouch");
if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0) {
Log.d(TAG, "Obscured");
if (event.getAction() == MotionEvent.ACTION_UP) {
new AlertDialog.Builder(MyActivity.this)
.setTitle("Alert!")
.setMessage("Overlay detected!")
.setNeutralButton("Dismiss", null)
.show();
}
// Return true to prevent the button from processing the touch.
return true;
} else {
Log.d(TAG, "Not obscured");
}
return false;
}
});
现在,只要单击布局上的几乎任何位置,我都会收到触摸事件。通过将 MotionEvent 的标志与 FLAG_WINDOW_IS_OBSCURED 进行比较,我还能够检测到将触摸事件传递给我的 Activity 的覆盖,但前提是被触摸的区域实际上被遮挡了。此外,onTouchListener 似乎不会在触摸 UI 元素(如 Button 和 EditText)时被调用,而只会在空白处调用。
有没有办法检测我的 Activity 的任何部分是否被遮挡,有没有办法为整个 Activity 设置一个 onTouchListener(),而不是为每个 UI 元素设置单独的 onTouchListener()?
【问题讨论】:
标签: android android-activity android-edittext overlay ontouchlistener