目前我在一个按钮上有一个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进行比较来检测将触摸事件传递给我的活动的叠加层,但前提是实际上隐藏了被触摸的区域。此外,onTouchListener似乎不会在触摸UI元素(如Buttons和EditText)时调用,但仅限于空白区域。
有没有办法检测我的Activity的任何部分是否被遮挡,是否有任何方法为整个Activity设置一个onTouchListener(),而不是为每个UI元素分别设置?
答案 0 :(得分:2)
如果您只是想知道触摸事件发生,即没有触摸视图的信息,您可以覆盖Activity的dispatchTouchEvent。
答案 1 :(得分:1)
将OnTouchListener应用于您的激活的根布局。这将确定问题。
答案 2 :(得分:1)
this.setOnClickListener(this);
它可能不适用于活动,但它适用于扩展SurfaceView
的类答案 3 :(得分:0)
创建宽度和高度为“fill_parent”的相对布局。 然后在activity中为Relative Layout创建一个onTouchListener。
RelativeLayout relativeLayout =(RelativeLayout) findViewById(R.id.relativeLayout);
relativeLayout.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//do some stuff here
return false;
}
});