您可以覆蓋攔截所有觸摸事件,在您的活動,即使你有一些像ScrollView,Button等的視圖會消耗觸摸事件。
結合ViewGroup.requestDisallowInterceptTouchEvent
,您可以禁用ViewGroup的觸摸事件。例如,如果要禁用一些ViewGroup中所有的觸摸事件,試試這個:
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
requestDisallowInterceptTouchEvent(
(ViewGroup) findViewById(R.id.topLevelRelativeLayout),
true
);
return super.dispatchTouchEvent(event);
}
private void requestDisallowInterceptTouchEvent(ViewGroup v, boolean disallowIntercept) {
v.requestDisallowInterceptTouchEvent(disallowIntercept);
int childCount = v.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = v.getChildAt(i);
if (child instanceof ViewGroup) {
requestDisallowInterceptTouchEvent((ViewGroup) child, disallowIntercept);
}
}
}
重寫活動#dispatchTouchEvent(..)方法可以讓你之前攔截所有觸摸事件查看:■遁逃。 – Jens
@Jens它是真的,但它不攔截'DialogFragment'上的觸摸(因爲它可能屬於另一個窗口) –
我想你已經嘗試把你自己的TYPE_SYSTEM_ALERT窗口放在使用WindowManager#addView(..)的所有東西上面? – Jens