Android WindowManager是Android系统中用于管理窗口层级和显示的类。要管理窗口层级,您需要遵循以下步骤:
- 获取WindowManager实例:
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
- 创建一个窗口(如Android中的Dialog或Activity):
// 创建一个对话框 Dialog dialog = new Dialog(this, R.style.CustomDialog); dialog.setContentView(R.layout.dialog_layout);
- 设置窗口的布局属性:
// 设置窗口的布局属性 WindowManager.LayoutParams layoutParams = dialog.getWindow().getAttributes(); // 设置窗口的层级 layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; // 用于悬浮窗 // layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; // 用于系统警告框 // layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE; // 用于电话窗口 // layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; // 用于系统错误窗口 // 设置窗口的宽高 layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; // 设置窗口的位置 layoutParams.gravity = Gravity.CENTER; // 设置窗口是否允许背景透明 layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // layoutParams.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN; // 设置全屏 // 设置窗口的层级 layoutParams.priority = WindowManager.LayoutParams.PRIORITY_HIGH; // 设置高优先级
- 将窗口添加到WindowManager:
windowManager.addView(dialog, layoutParams);
- 管理窗口层级:
要管理窗口层级,您可以使用WindowManager.LayoutParams.type
属性设置不同的窗口类型。例如,要创建一个悬浮窗,您可以将其类型设置为WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
。要创建一个系统警告框,您可以将其类型设置为WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
。
请注意,某些窗口类型可能需要系统签名或系统安装的特权。在这种情况下,您需要在AndroidManifest.xml中添加相应的权限:
并在运行时请求权限(针对Android 6.0及更高版本):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.SYSTEM_ALERT_WINDOW) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW}, REQUEST_CODE); } }
通过以上步骤,您可以使用Android WindowManager管理窗口层级。请注意,这些示例代码仅适用于Dialog窗口。如果您使用的是Activity窗口,您需要相应地调整代码。