2013-10-03 265 views
1

我已经创建了一个自定义DialogFragment,如开发人员指南中所述。 现在我想要做的事听起来很简单,但我无法让它工作。 我已经定义:android:background="@android:color/transparent"在我的布局XML至极我加载像这样(在我的onCreateDialog):无法让我的DialogFragment背景透明

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。这可能是原因吗? 或者我在做别的事情吗?

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

回答

1

这是我用它来完全去除Dialog`s background.-

<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但你手动充气视图的风格,我猜这就是问题所在。试试这个instead.-

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

然后 '手动' 实例it.-

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

Didnt't工作:/。我在加载布局后加载样式。 final View view = inflater.inflate(R.layout.pausedialog,null); setStyle(STYLE_NO_FRAME,R.style.CustomDialog); – puelo

+0

我的不好,没注意到充气部分,我想这可能是问题。刚编辑我的答案。 – ssantos

+0

我手动充气视图,因为我需要它来找到我的TextViews:TextView tResume =(TextView)view.findViewById(R.id.tResume); 我想支持API级别8及以上,但没有“新AlertDialog.Builder(这,R.style。CustomDialog);“支持 – puelo

3

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

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

或者

如果您正在使用对话框实例对话框类,那么你还可以设置的风格和主题。

+0

没有工作,可悲...我相信它有一些事情要做的支持库.. – puelo

+0

你在做什么? 你可以发布截图吗? –

+0

请在将视图设置为对话框之前检查是否正在设置样式和主题。一旦设置了视图它不会改变它的主题。 也许这可能是问题所在。 –

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