1
我正在創建應繪製全屏疊加層的應用程序。像鎖屏一樣。用戶設置了一些計時器,當時間到了時,應該出現這個覆蓋圖。在導航欄後面或上方繪製疊加層
但覆蓋不包括系統導航欄。當導航欄是半透明時,這是個問題。用戶可以觸摸系統按鈕,並可以看到他們身後的一些可變背景。因此用戶可以看到鎖定屏幕後面的內容。這是一個問題。 我怎麼能防止這種情況?
請注意,鎖定屏幕疊加層不是活動。用戶設置計時器並可以自由瀏覽他的設備。在時機成熟時應用得出一些觀點在屏幕上,就像這樣:
View overlayView = new OverlayView(this);
windowManager.addView(overlayView, OverlayView.createLayoutParams(retrieveScreenHeight()));
其中
public OverlayView(Context context) {
super(context);
inflate(context, R.layout.overlay_view, this);
}
static WindowManager.LayoutParams createLayoutParams(int height) {
final WindowManager.LayoutParams params =
new WindowManager.LayoutParams(MATCH_PARENT, height, TYPE_SYSTEM_ERROR,
FLAG_NOT_FOCUSABLE
| FLAG_LAYOUT_IN_SCREEN
| FLAG_LAYOUT_NO_LIMITS
| FLAG_NOT_TOUCH_MODAL
| FLAG_LAYOUT_INSET_DECOR
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
, TRANSLUCENT);
params.gravity = Gravity.TOP;
return params;
}
public int retrieveScreenHeight() {
int result = 0;
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Point outSize = new Point();
wm.getDefaultDisplay().getSize(outSize);
if(outSize.y > outSize.x){
result = outSize.y;
}else{
result = outSize.x;
}
return result;
}
感謝您的回答。我應該注意到疊加視圖不是一個活動。這只是一個「視圖」。無論屏幕上有什麼內容,我都可以在任何時候使用'windowManager.addView'來繪製它。屏幕上可能是當時的任何其他應用程序。 – user2775914
然後,最簡單的方法是將該視圖作爲「虛擬活動」的一部分,全屏並將視圖作爲背景。 這樣,您仍然可以看到背後是什麼(因爲疊加層是半透明的),並且您從全屏標誌中受益。 – NSimon
你的意思是,當時間到了,應用程序應該彈出這個全屏「虛擬活動」?我不應該使用'windowManager.addView'呢?但是,我怎麼能將這個活動設置爲覆蓋?我如何防止關閉此活動?它應該是鎖屏,在用戶無法解鎖的情況下無法關閉。 – user2775914