无法使我的DialogFragment背景透明

时间:2013-10-03 19:04:03

标签: java android android-dialogfragment

我已经创建了一个自定义的DialogFragment,就像它在开发者指南中所描述的那样。 现在我想做的事情听起来很简单,但我无法让它发挥作用。 我在我的布局xml中定义了android:background="@android:color/transparent"我正在这样加载(在我的onCreateDialog中):

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

LayoutInflater inflater = getActivity().getLayoutInflater();


final View view = inflater.inflate(R.layout.pausedialog, null);
setStyle(STYLE_NO_FRAME, R.style.CustomDialog);

正如您所看到的,我还尝试在DialogFragment中设置自定义样式,其定义如下:

<style name="CustomDialog" parent="android:style/Theme.Dialog">
    <item name="android:windowBackground">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:alwaysDrawnWithCache">false</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

我也试过getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0)); 这会导致空指针异常。

我正在使用android.support.v4.app.DialogFragment。这可能是原因吗? 或者我做错了什么?

如果您需要对话框的屏幕截图,请告诉我们! 感谢

3 个答案:

答案 0 :(得分:3)

尝试在dialogFragment类实现的onCreate方法中设置样式和主题。

@Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
         int style=DialogFragment.STYLE_NO_TITLE;
         int theme=android.R.style.Theme_Translucent;
         setStyle(style, theme);
    }

如果您正在使用Dialog类,那么您还可以在对话框实例上设置样式和主题。

答案 1 :(得分:2)

这对我有用。我创造了一种新风格:

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

然后在我的DialogFragment的onCreate()方法中设置此样式,如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialog);
}

答案 2 :(得分:1)

这是我用来完全删除Dialog背景的样式.-

<style name="Theme.Dialog" parent="@android:style/Theme.Translucent.NoTitleBar">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

对于Dialog创建,您创建的是DialogBuilder,但是您手动对视图进行了充气,​​我想这就是问题所在。试试这个.-

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.customTheme));
AlertDialog dialog = builder.create();
dialog.show();

修改

另一种方法是扩展AlertDialog .-

public class CustomDialog extends AlertDialog {
    public DialogParent(Context context) {
        super(context, R.style.CustomDialog);
        setContentView(R.layout.pausedialog);

        // More initialization stuff    
    }
}

然后'手动'实例化它.-

AlertDialog dialog = new CustomDialog(getActivity());
dialog.show();