如何创build一个位于Android所有应用程序之上的UI或小部件?

我可以在Android中创build一个用户界面或小部件,它将位于所有应用程序之上吗? 有这样的小部件的应用程序。 一个例子是在所有应用程序的顶部有一个摄像头图标,点击后将捕获屏幕。

Solutions Collecting From Web of "如何创build一个位于Android所有应用程序之上的UI或小部件?"

如果你只想显示一些东西,你甚至可以在锁屏上显示它。

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

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

创build一个服务并执行以下操作:

//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); 

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

这将使其成为所有内容(包括locking屏幕)的叠加,但不能点击。 WindowManager.LayoutParams。 TYPE_SYSTEM_OVERLAY

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

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

有一件事要注意使用“TYPE_SYSTEM_ERROR”。 如果你点击一个click事件,它所调用的任何东西都会在锁屏幕后面发生。