2015-01-03 15 views

回答

7

下面的代码将增加对一切的顶部覆盖层:

View v1 = new View(this);  
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
1000, 
50, 
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, 
PixelFormat.OPAQUE); 

params.gravity = Gravity.BOTTOM; 
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); 
wm.addView(v1, params); 

阻止触摸事件要么就得换旗或下面的代码将工作:

protected boolean onTouchEvent (MotionEvent me) { 
    return true; 
} 

对于V1,你会做一个导入:

import android.view.View.OnTouchListener; 

然后设置onTouchListener:

v1.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return true; 
    } 
}) 
+0

我怎么会不记得触摸监听器? +1 – jvrodrigues

12

如果盖还没有得到触摸事件,则事件传递到底层的视图,因此阻止在它下面的意见触摸事件,让您的覆盖可触摸android:clickable="true"

+0

这是伟大的,对我的作品,谢谢 – li2

+0

好的技巧,为我工作的感谢 –

1

穿上覆盖layer.then设置按钮该按钮的android:背景=“@空”它挡住的视图下方it..hope触摸事件它解决您的问题

7

下面的代码适用于我。我添加了android:clickable="true"来将触摸事件阻止到其下的其他视图。

这是叠加层中的ProgressBar示例。如果你不想使用ProgressBar,你可以在没有它的情况下使用FrameLayout。

<FrameLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/progress_overlay" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:alpha="0.4" 
      android:animateLayoutChanges="true" 
      android:background="@android:color/black" 
      android:visibility="gone" 
      android:clickable="true"> 

      <ProgressBar 
       style="?android:attr/progressBarStyleLarge" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:indeterminate="true"/> 

</FrameLayout> 
相关问题