我有一个在窗口管理器上显示 float View 的服务(使用 WINDOW_TYPE_ALERT 权限)。我能够显示它并执行操作。但是,我有两个具体问题:
- 关于 float View 的实现
- 如何监听系统后退按钮事件以便我可以关闭 View 。
实现:
在 list 中我添加了权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
我有一个广播接收器,它将监听警报事件。收到事件后,我将启动一项服务来显示 float View 。以下是我用来创建 View 的代码。
LayoutParams layOutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
每当用户对 View 执行任何操作时,我都会从窗口管理器中删除 View 并终止服务。
我想知道的是 - 这是解决问题的正确方法还是有更好的方法?而且,我应该更改 LayoutParams 还是保持原样?
其次,当有 SYSTEM BACK/HARDWARE BACK 按钮按下事件时,我还想关闭这个 float View 。有关如何执行此操作的任何指示都会有所帮助。
附上 float View 的屏幕截图以便更好地理解:
最佳答案
就后退按钮检测而言 - 我让它以下列方式工作(一切都发生在服务 onCreate 代码中):
- 将您想要的 View 包装到 ViewGroup(LinearLayout、Relative 或其他)
- 在包装器 View 中像这样覆盖 dispatchKeyEvent:
mView = new RelativeLayout(this) {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
// < your action >
return true;
}
return super.dispatchKeyEvent(event);
}
};
- 将包装器 View 添加到窗口管理器,并确保未在包装器布局参数上设置 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE。
关于android - 如何向 Android 窗口管理器添加 float View 并监听系统/硬件后退按钮事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18124153/