将视图带到绝对前端(甚至超过警报对话框)

时间:2017-01-14 17:11:41

标签: android alertdialog

我需要一个视图始终处于最前沿,即使是在警报对话框中也是如此。我想可能有两种方法可以达到这个目的:

  1. 以某种方式创建警报对话框作为现有视图的一部分,而不是自己的活动
  2. 视图上的某种标志将其带到包括警报对话框在内的所有内容
  3. 这可能吗?如果是这样的话?

1 个答案:

答案 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"
}