我需要一个视图始终处于最前沿,即使是在警报对话框中也是如此。我想可能有两种方法可以达到这个目的:
这可能吗?如果是这样的话?
答案 0 :(得分:1)
WindowManager,其中LayoutParams和Flag为TYPE_SYSTEM_ERROR
。也显示在锁屏上。
WindowManager windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 100; // position on screen (optional)
params.y = 100;
添加视图:
windowManager.addView(yourView, params);
编辑:
要避免覆盖LockScreens:删除TYPE_SYSTEM_ERROR
标记并添加以下内容:
WindowManager.LayoutParams.TYPE_PHONE
为此,您需要将以下权限添加到AndroidManifest.xml中:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
除了Android Marshmallow 6.0.0 之外,您无需在运行时在大多数设备上请求它。有一种特殊的方式来请求它而不是常规请求。使用以下方法检查:
if (Settings.canDrawOverlays()) {
// you have permission
} else {
// send an intent with action "ACTION_MANAGE_OVERLAY_PERMISSION"
}