讓Android屏幕不響應任何點擊

FBI Warning:歡迎轉載,但請標明出處:http://blog.csdn.net/codezjx/article/details/45220101,未經本人同意請勿用於商業用途,感謝支持!


原理:在頂層顯示一個Dialog,讓其不可Cancel(無法響應任何點擊),並將其設置爲最頂層的type,然後將其灰色區域設置爲透明即可完成該效果(免Root,免系統權限,親測包括Android5.0也有這個漏洞)。下面是詳細代碼與解析:

 

Dialog dialog = new AlertDialog.Builder(getApplicationContext(), R.style.Transparent)
.setView(view)
.create();
 
Window window = dialog.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.BOTTOM;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(params);
window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
 
dialog.setCancelable(false);
dialog.show();



Dialog的背景Style:

<style name="TransparentWindowBg">  
	<item name="android:windowBackground">@android:color/transparent</item>
</style> 


 

必須注意以下幾點:

1:使用getApplicationContext()而不是Activity Context。因爲使用activity context不能覆蓋底部那條Navigation Bar,用application context則影響範圍可以覆蓋整個屏幕(屌爆了有木有)。

2:創建dialog的時候在構造函數傳入一個Transparent的style,這個方法能dialog周圍的灰色區域變爲透明,更神不知鬼不覺,感覺有點猥瑣了有木有。

3:設置window typeWindowManager.LayoutParams.TYPE_SYSTEM_ERROR,查看官方文檔: internal system error windows, appear on top of everything they can,他是系統內部錯誤彈窗,顯示在任何界面之上,權限這個是最高的。

4:最後Manifest加入以下權限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

 

 

使用上面的方法的時候一定要注意:這層view會在鎖屏界面之上、還有長按電源鍵的關機dialog之上。所以,屏蔽了之後,除非你長按power鍵關機,否則只能通過代碼將其移除解決屏蔽。使用場景的話,各位程序猿發揮創造力吧!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章