How to create an UI or a widget that sits on top of all applications in Android?

给你一囗甜甜゛ 提交于 2019-11-28 05:08:45

If you want to just display something, you can display it on top of everything even the lockscreen.

If you want something to be clickable, you can display it on top of anything except the lockscreen.

Here's a sample, modify to your needs:

Create a service and do the following:

//These three are our main components.
WindowManager wm;
LinearLayout ll;
WindowManager.LayoutParams ll_lp;

//Just a sample layout parameters.
ll_lp = new WindowManager.LayoutParams();
ll_lp.format = PixelFormat.TRANSLUCENT;
ll_lp.height = WindowManager.LayoutParams.FILL_PARENT;
ll_lp.width = WindowManager.LayoutParams.FILL_PARENT;
ll_lp.gravity = Gravity.CLIP_HORIZONTAL | Gravity.TOP;

//This one is necessary.
ll_lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

//Play around with these two.
ll_lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
ll_lp.flags = ll_lp.flags | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

//This is our main layout.
ll = new LinearLayout(this);
ll.setBackgroundColor(android.graphics.Color.argb(0, 0, 0, 0));
ll.setHapticFeedbackEnabled(true);

//And finally we add what we created to the screen.
wm.addView(ll, ll_lp);

The following are more options for how the view is displayed.

This will make it an overlay on top of everything (including lock screen), but not clickable. WindowManager.LayoutParams. TYPE_SYSTEM_OVERLAY

This will make it clickable, but it won't be over the lock screen WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

This will make it above everything (including lock screen) AND clickable. WindowManager.LayoutParams.TYPE_SYSTEM_ERROR

One thing to note about using "TYPE_SYSTEM_ERROR". If you wire-in a click event, anything it invokes will happen behind the lock screen.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!