WindowManager windowManager;
TextView textView;
WindowManager.LayoutParams params;
private void addWindow() {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_TOAST);
// 类型是TYPE_TOAST,像一个普通的Android Toast一样。这样就不需要申请悬浮窗权限了。
windowManager = (WindowManager) getApplication().getSystemService(
getApplication().WINDOW_SERVICE);
textView = new TextView(this);
textView.setGravity(Gravity.CENTER);
textView.setBackgroundColor(Color.BLACK);
textView.setText(" @ csdn");
textView.setTextSize(10);
textView.setTextColor(Color.RED);
// 初始化后不首先获得窗口焦点。不妨碍设备上其他部件的点击、触摸事件。
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
// 1.FLAG_NOT_FOCUSABLE:
// 表示Window不需要获得焦点,也不需要接受接受各种输入时间,此标记会同时启用FLAG_NOT_TOUCH_MODAL,最终事件会直接传递给下层具有焦点的Window。
// 2.FLAG_NOT_TOUCH_MODAL:
// 在这个模式下,系统会将当前window区域之外单击事件传递给底层的Window,当前Window区域以内的2单击事件则自己处理。这个标记十分重要,一般说都会开启这个标记。
// 3.FLAG_SHOW_WHEN_LOCKED
// 开启这个模式可以让Window显示在锁屏的界面。
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = 300;
params.gravity = Gravity.TOP;
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplication(), "不需要权限的悬浮窗实现",
Toast.LENGTH_LONG).show();
}
});
windowManager.addView(textView, params);
}
private void deleteWindow() {
if (windowManager != null && textView != null) {
windowManager.removeView(textView);
}
}
private void updateWindow() {
if (windowManager != null && textView != null && params != null) {
textView.setText("updateWindow");
windowManager.updateViewLayout(textView, params);
}
}
android Window悬浮窗添加 删除 修改
最新推荐文章于 2023-06-04 13:15:59 发布