8

我可以在 Android 中创建一个位于所有应用程序之上的 UI 或小部件吗?有些应用程序具有这样的小部件。一个示例在所有应用程序顶部都有一个相机图标,单击该图标将捕获屏幕。

4

2 回答 2

18

如果您只想显示某些内容,则可以将其显示在所有内容之上,甚至是锁定屏幕。

如果您希望某些内容可以点击,您可以将其显示在除锁屏之外的任何内容之上。

这是一个示例,根据您的需要进行修改:

创建服务并执行以下操作:

//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);
于 2012-07-16T05:37:42.703 回答
3

以下是有关如何显示视图的更多选项。

这将使其覆盖在所有内容(包括锁定屏幕)之上,但不可点击。 WindowManager.LayoutParams。TYPE_SYSTEM_OVERLAY

这将使其可点击,但不会超过锁定屏幕 WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

这将使它高于一切(包括锁定屏幕)和可点击。 WindowManager.LayoutParams.TYPE_SYSTEM_ERROR

关于使用“TYPE_SYSTEM_ERROR”需要注意的一件事。如果您连接点击事件,它调用的任何内容都将在锁定屏幕后发生。

于 2015-02-10T02:54:44.897 回答