透明对话框在某些设备中不起作用

时间:2016-03-10 22:03:48

标签: android user-interface

我正在使用此代码应用具有透明背景的颜色。

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(MyColor));

它在我的手机上工作得非常好,但在我的平板电脑中却无法正常工作

显示我的dialig上有白色和灰色背景(我使用自定义视图和背景设置为@null):

enter image description here

10 个答案:

答案 0 :(得分:6)

根据您的帖子,我有一些问题可能导致这些问题具有透明度。

1 .- 由于您的平板电脑正在显示不同的呈现,因此操作系统API可能低于您手机上的版本?如果是这种情况,请尝试使用与您的手机操作系统API匹配的适当支持库。

2 .- 假设两个设备在OS API上相似,您可以尝试两种不同的方法。

a) 将ZERO作为ColorDrawable的参数传递:)

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

b) 创建一个不同的活动,只是为了显示您的对话框并隔离与您的父活动相关的主题(肯定会导致问题),执行类似的操作下方。

    <style name="Transparent" parent="@android:style/Theme.NoTitleBar">
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>      
    <item name="android:backgroundDimEnabled">false</item>
</style>

以上是您必须与对话框活动相关联的主题,然后在XML布局上使用以下内容。

android:background="#aa000000" 

您可以将此方法应用于对话,显示DEMO屏幕或教学所需的活动:)

答案 1 :(得分:5)

你可以试试这个,但似乎已经建议了这个......?

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

相反,你试过这样的事吗?

 <style name="TransparentDialogTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
     <item name="android:windowBackground">@color/transparent</item>
     <item name="android:colorBackgroundCacheHint">@null</item>
 </style>

然后,当你进行对话时,试试这个....?

final Dialog dialog = new Dialog(this, R.style.TransparentDialogTheme); 

这有点矫枉过正,但如果你确实需要它可能也需要它:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<style name="TransparentDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@color/orange_transparent</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:gravity">center</item>
</style>

</resources>

答案 2 :(得分:3)

问题在于,AlertDialog构建器实际上不适合设计透明对话框,并且将始终具有黑色背景,实际上是它的主题,而是使用对话框来创建透明主题。

<强>示例:

alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.show();

使用Dialog不需要对透明背景进行任何主题操作,因此基本上很容易。

答案 3 :(得分:1)

这对我有用:

        alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

如果没有,请查看this post

答案 4 :(得分:1)

使用它:

alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
  alertDialog.show();

答案 5 :(得分:1)

你也需要禁用昏暗:

Window w = dialog.getWindow();
w.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
LayoutParams lp = w.getAttributes();
lp.flags &= ~LayoutParams.FLAG_DIM_BEHIND; 
lp.dimAmount = 0;
w.setAttributes(lp);

答案 6 :(得分:0)

我建议您创建一个透明背景的活动,然后根据您的要求在活动中显示您想要的内容并轻松进行自定义。这是让你入门的东西

How do I create a transparent Activity on Android?

在我尝试实现类似的功能时,帮助了我很多,以便在我的应用中显示繁忙的屏幕。我希望你觉得这很有帮助,请告诉我你走哪条路。祝你好运。

答案 7 :(得分:0)

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

这在lolipop以下的api以及上面或lolipop使用

都没问题
android:background="@android:color/transparent"

在对话框片段的父布局中,所以在nutsell中使用两者来解决所有api中的这个问题。

答案 8 :(得分:0)

首先添加这样的风格

if (interstitialAdWasDisplayed) {
  finish();
} else {
  finishAfterTransition();
}

之后,在创建对话框时,您也可以按如下方式设置此样式。

<style name="customStyleDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:background">@android:color/transparent</item>
</style>

确保在视图中添加通过

设置为此对话框的背景颜色
Dialog dialog = new Dialog(getActivity(), R.style.customStyleDialog);
// other settings to the dialog
// for making work transparency on low level devices add next line too after show
// dialog 

dialog.show();
dialog.getWindow().setBackgroundDrawable(newColorDrawable(android.graphics.Color.TRANSPARENT));

答案 9 :(得分:0)

在对话框中使用主题。

<style name="Dialog_Transparent" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>


public class RProgressDg extends Dialog {

    public RProgressDg(Context context) {
        this(context, R.style.Dialog_Transparent);
    }

    public RProgressDg(final Context context, int theme) {
        super(context, theme);
        this.setContentView(R.layout.dg_pro_round);
    }

}