2014-10-02 86 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; 
}