2014-10-02 96 views
2

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

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");  

编辑:myChooserDialog的代码:

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; 
     } 
    } 
} 

目前,背景是全黑的。我在这里做错了什么?

马库斯

+0

您可以自定义对话框中满。甚至是DialogFragments。 http://developer.android.com/guide/topics/ui/dialogs.html – 2014-10-02 07:35:32

回答

1

DialogFragment

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

getWindow()方法未定义,类型为myChooserDialog – Marcus 2014-10-02 08:28:43

+0

请显示myChooserDialog的代码 – GrIsHu 2014-10-02 08:29:24

+0

检查我的编辑请 – Marcus 2014-10-02 08:42:05

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); 
+0

不是,因为我没有在onCreate方法中构建我的对话框。 – Marcus 2014-10-02 08:25:02

+0

此外,这给出了一个错误:方法getWindow()是未定义的类型DialogFragment – Marcus 2014-10-02 08:30:23

+0

@Marcus检查出我更新的答案。 – GrIsHu 2014-10-02 09:28:45

1

试试这个片断:

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

这会影响整个窗口。也就是说,例如,如果你想在对话框和窗口之间有一个边距,它将不可见,所以整个窗口将是透明的。 – plopd 2016-06-06 15:36:52

6

添加以下行到你的onCreateDialog

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