Как создать пользовательский интерфейс и виджет, который находится поверх всех приложений в Android?
могу ли я создать пользовательский интерфейс или виджет в Android, который будет сидеть поверх всех приложений? Есть приложения, виджеты подобного. Один пример имеет значок камеры поверх всех приложений, которые при нажатии будут захватывать экран.
2 ответов
Если вы хотите просто отобразить что-то, вы можете отобразить его поверх всего, даже на экране блокировки.
Если вы хотите, чтобы что-то было кликабельным, вы можете отобразить его поверх всего, кроме экрана блокировки.
вот образец, изменить для ваших нужд:
создайте службу и выполните следующие действия:
//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);
ниже приведены дополнительные параметры отображения представления.
Это позволит сделать его поверх всего (включая экран блокировки), но не кликабельны. WindowManager.LayoutParams. TYPE_SYSTEM_OVERLAY
Это сделает его кликабельным, но он не будет над экраном блокировки WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
Это сделает его выше всего (включая экран блокировки) и кликабельным. WindowManager.LayoutParams.TYPE_SYSTEM_ERROR
одно замечание об использовании "TYPE_SYSTEM_ERROR". Если вы проводите в событии щелчка, все, что он вызывает, произойдет за экраном блокировки.