安卓透明的DialogFragment

3

我有一个对话框片段,当WidgetConfig活动正在运行时显示。对话框显示一个列表,用户可以选择其中一些项目。我希望这个对话框是透明的,这样你就可以在对话框的背景中看到主屏幕。这是我目前在WidgetConfig活动中所做的:

    DialogFragment dialog = new myChooserDialog();  
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));        
    dialog.show(getFragmentManager(), "dialog");    

编辑:我的选择对话框的代码:

public class MyChooserDialog extends DialogFragment{

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        choices = getResources().getStringArray(R.array.city_choices);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());       
        builder.setTitle(getResources().getString(R.string.widget_dialog_chooser_title));
        builder.setPositiveButton(getResources().getString(R.string.widget_dialog_chooser_posBtn), this);
        builder.setNegativeButton(getResources().getString(R.string.widget_dialog_chooser_negBtn), this);   
        builder.setSingleChoiceItems(choices, -1, this);
        return builder.create();
    }


    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
        case DialogInterface.BUTTON_POSITIVE:   
            //doing magic tricks
            break;

        case DialogInterface.BUTTON_NEGATIVE:
            dialog.dismiss();
            break;

        default:
            //more magic
            break;
        }   
    }
}

目前,背景全部为黑色。我做错了什么呢?

Marcus


您可以完全自定义对话框,甚至是DialogFragments。http://developer.android.com/guide/topics/ui/dialogs.html - Phantômaxx
4个回答

15

在您的onCreateDialog中添加以下行:

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color
            .TRANSPARENT));
    return dialog;
}

3
在 style.xml 文件中编写以下代码。
<style name="Theme.Transparent" parent="android:Theme">
       <item name="android:windowIsTranslucent">true</item>
       <item name="android:windowBackground">@android:color/transparent</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>
   </style>

在你的MyChooserDialog()类中设置对话框的样式。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    choices = getResources().getStringArray(R.array.city_choices);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme.Transparent);

不行,因为我没有在onCreate方法中构建我的对话框。 - Marcus
同时,这会出现一个错误:类型DialogFragment未定义方法getWindow()。 - Marcus
另外,android.R.style.Theme.Transparent 会出现以下错误:android.R.style.Theme 的原始类型 int 没有 Transparent 字段。应该使用 R.style.Theme_Transparent。这会给我的对话框一个白色背景。 - Marcus

2

尝试在您的DialogFragment中使用此代码:

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

1
方法getWindow()对于类型myChooserDialog未定义。 - Marcus
使用以下代码替换 getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));dialog.setBackgroundDrawable(new ColorDrawable(0)); - Himanshu Agarwal
方法setBackgroundDrawable(ColorDrawable)对于类型DialogFragment未定义。在尝试发布答案之前,请至少尝试一下代码。 - Marcus
请尝试以下代码:dialog.getView().setBackground(new ColorDrawable(0)); - Himanshu Agarwal

1

Try this snippet:

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

1
这将影响整个窗口。也就是说,例如,如果您想在对话框和窗口之间留出边距,它将不可见,因此整个窗口将是透明的。 - user1443317

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