Я пытаюсь создать кнопку, которая всегда на экране.
- Кнопка должна быть кликабельной и
что-нибудь прямо под кнопкой
не должен быть активирован на прессе.
- Активность или домашний экран работает
за кнопкой все равно должно работать,
это означает, что пользователь все еще должен быть
способен взаимодействовать с домом
экран или приложение.
- программная клавиша
кнопки все равно должны работать: дома,
назад, меню и т. д.
Следующий код работает # 1 и # 2, но кнопки программных клавиш больше не работают:
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
Изменение этого параметра отключает оверлей от кликов, но # 2 и # 3 работают:
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
Наконец, в этом примере щелкается оверлей и то, что находится за ним:
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
Как я могу изменить это так, чтобы наложение было активным, что непосредственно под ним не было активным, и все, что находилось за пределами наложения, работало, включая кнопки «Домой»?
Примером приложения, которое выполняет все это, является Super Manager.
ОБНОВЛЕНИЕ: я обнаружил, что следующее позволяет использовать кнопку домой, но все же не другие кнопки:
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH