Android对话框透明化

31
我想取消对话框的边框并使其完全透明,就像图像在屏幕顶部一样。 输入图像说明
我的对话框XML为-
<?xml version="1.0" encoding="utf-8"?>

<ImageView android:id="@+id/ImageView01"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:layout_centerHorizontal="true" android:visibility="invisible"/>


可能是 Android中带有透明背景的对话框 的重复问题。 - yanchenko
7个回答

97

尝试下面的代码

Dialog mDialog = new Dialog(mContext, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

现在出现了一个新问题。整个屏幕闪烁,如此描述- http://stackoverflow.com/questions/3379322/android-fullscreen-status-bar-flickers 我想知道是否有任何解决方法或者是否可以在不使用对话框的情况下获得相同的效果? - nasaa
尝试了这个方法,但问题仍然存在。我还将我的Activity设置为全屏模式,以为这可能会有所帮助,但结果并没有。 - nasaa
我不知道那个是否有效或者会产生相同的问题。尝试使用Activity而不是Dialog。 - ingsaurabh
关闭活动的动画并在xml中将主题设置为透明,它将作为对话框工作。 - ingsaurabh
在清单文件中,可以将以下内容添加到活动声明中:android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 和 android:layout_gravity="center" - 添加到 XML 布局中。 - Yar

63

试试这个:

mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));

4
有没有办法将对话框的不透明度更改为50%,而不更改其背景? - Green_qaue
该解决方案唯一的问题是它无法在Android 4+上取消标题行。 - Pozzo Apps
2
您需要调用mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE)来隐藏标题栏。 - speedynomads

20

为了达到半透明的效果,例如50%的不透明度,请使用:

Drawable d = new ColorDrawable(Color.BLACK);
d.setAlpha(130);
mDialog.getWindow().setBackgroundDrawable(d);

'130'可以更改(0-255)以达到所需的不透明度。


1
或者如果你想要一行代码,可以使用 mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0x88000000));,其中的“88”是一个十六进制值,控制透明度(00表示完全透明,FF表示完全不透明)。 - RTF

10

试试这个:

final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();

对我来说,这个完美地工作了!它保持了半透明的背景,并使得对话框在对话框内容之外可以被取消。虽然不完全符合问题的要求,但对我来说...完美无瑕 :) 谢谢! :) - dy_

1

For API 11+

Dialog mDialog = new Dialog(mContext, android.R.style.Theme_Holo_Light_Panel);

0
最简单的方法是在您的DialogFragment的onCreate()方法中调用。
setStyle(DialogFragment.STYLE_NO_FRAME, 0);

如果您在onCreateView中返回的视图没有指定背景,则对话框的背景将变为透明。

为什么?DialogFragment.STYLE_NO_FRAME表示操作系统不会在对话框窗口中进行任何绘制,而您的视图需要100%负责绘制有关对话框的所有内容。


0

接受的答案会导致在有缺口的设备上出现问题,因为状态栏完全消失并显示一个丑陋的白色背景。

相反,正确的方法是定义您自己的样式。

<style name="FullScreenDialogTheme" parent="Theme.MaterialComponents.Dialog">
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:statusBarColor">@color/colorPrimary</item>
</style>

现在,这将使窗口没有边框并且在屏幕上透明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接