#android #android-accessibility #android-overlay
#Android #Специальные возможности #android-наложение
Вопрос:
У меня есть вид наложения (LinearLayout), добавленный к WindowManager
следующему набору параметров:
private void setWindowParams(WindowManager.LayoutParams params) {
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
params.format = PixelFormat.TRANSLUCENT;
params.gravity = Gravity.CENTER;
}
Это линейное описание содержит три кнопки «HOME», «RECENTS», «BACK»
Я реализовал onKeyEvent()
удаление этого вида наложения из диспетчера окон при нажатии кнопки «Назад» на телефоне.
Когда кнопка «Назад» нажата в моем макете наложения, я вызываю свою службу специальных возможностей, и она работает нормально. Теперь, когда я нажимаю кнопку «Назад» на своем телефоне, мой вид наложения сохраняется. Потому что он не получает ключевые события с тех пор, как у меня был WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
установлен этот флаг в параметрах.
Но когда я не установил этот флаг, нажатие кнопки «Назад» из overlay просто скрывает само наложение, а не выполняет обратное действие под ним.
Я хочу, чтобы мое наложение скрывалось при нажатии кнопки «Назад» на телефоне. А также для выполнения функции кнопки «Назад» при нажатии кнопки «Назад» из моего наложения.
Есть ли какой-либо способ отличить фактическое нажатие кнопки от нажатия кнопки, запускаемой программным performGlobalAction(MyAccessibilityService.ACTION_BACK)
обеспечением? Любые предложения о том, как правильно это реализовать?
Ответ №1:
вы не можете этого сделать, потому что контекст диалогового окна будет уничтожен при прекращении действия, вы можете использовать WindowManager
Комментарии:
1. Спасибо за ответ. Я упомянул об этом в своем вопросе в качестве второго подхода. Тем не менее, это не сработало полностью
2. просто используйте removeview , чтобы удалить это диалоговое окно
3. Надеюсь, я понял свой вопрос. Я знал, что использование removeView () удалит его из окна. Но просто хочу знать, как вызвать это, когда нажата кнопка «Назад» системы, не затрагивая кнопку «Назад» моего наложения