android-在活动顶部创建一个透明对话框

背景

我正在尝试在当前活动之上放置一层,以解释当前屏幕上正在发生的事情,类似于contact + app上发生的事情。

我知道有一些解决方案(例如showCase库和superToolTips库),并且我也知道可以通过将其添加到活动窗口中来创建视图并将其设置在顶部,但是我需要将整个视图 对话框顶部。

问题

无论我尝试什么,每种解决方案都无法按我需要的方式工作。

简而言之,我需要的是:

  • 全屏对话框。

  • 动作栏,通知栏和后面活动的内容没有变化(视觉上和逻辑上没有变化),这意味着对话框后面的所有内容与显示对话框之前的相同。

  • 除了我用于对话框的视图(应该正常显示)以外,其他视图都是透明的。

我尝试过的

可悲的是,我总是只得到我需要的东西的一部分。

这是我的代码:

styles.xml:

<style name="full_screen_dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>

main activity.Java:

...
final Dialog dialog = new Dialog(this, R.style.full_screen_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setFormat(PixelFormat.TRANSLUCENT);
dialog.show();

这段代码会将布局放在活动的顶部,但是遗憾的是,即使我已经设置了透明度,它也没有任何透明度。 我使用的布局非常简单,这就是为什么我不发布它的原因。

我想念什么? 应该怎么做才能修复代码?

如何使对话框既透明又全屏,并且不会更改操作栏和通知栏。


工作方案

编辑:找到一个好的解决方案后,这是工作代码:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.floating_tutorial);
    final Window window = dialog.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}
2个解决方案
54 votes

只需更改对话框的背景颜色即可:

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

编辑:

这样可以防止变暗的效果:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
Steve Benett answered 2020-08-11T18:06:31Z
3 votes

只需添加它,它确实有效!

<item name="android:windowIsTranslucent">true</item>
        <item name="android:windowCloseOnTouchOutside">true</item>
        <item name="android:windowBackground">@android:drawable/alert_dark_frame</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
Javier Rodriguez answered 2020-08-11T18:06:51Z
translate from https://stackoverflow.com:/questions/18337533/create-a-transparent-dialog-on-top-of-activity