2015-01-03 17 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> 
相關問題