如何创build一个没有标题的DialogFragment?

我正在创build一个DialogFragment来显示一些关于我的应用程序的帮助信息。 除了一件事以外,一切正常:在窗口顶部有一个黑色的条纹,显示DialogFragment,我认为是为标题保留的,我不想使用。

这是特别痛苦的,因为我的自定义DialogFragment使用白色的背景,所以改变是太臭得不能放在一边。

让我以更加graphics的方式向你展示:

在这里输入图像说明

现在,我的DialogFragment的XML代码如下所示:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:id="@+id/holding" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/dialog_fragment_bg" > <!-- Usamos un LinearLayout para que la imagen y el texto esten bien alineados --> <LinearLayout android:id="@+id/confirmationToast" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/confirmationToastText" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="@string/help_dialog_fragment" android:textColor="#AE0000" android:gravity="center_vertical" /> </LinearLayout> <LinearLayout android:id="@+id/confirmationButtonLL" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" > <Button android:id="@+id/confirmationDialogButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_marginBottom="60dp" android:background="@drawable/ok_button"> </Button> </LinearLayout> </LinearLayout> </ScrollView> 

以及实现DialogFragment的类的代码:

 public class HelpDialog extends DialogFragment { public HelpDialog() { // Empty constructor required for DialogFragment } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //Inflate the XML view for the help dialog fragment View view = inflater.inflate(R.layout.help_dialog_fragment, container); TextView text = (TextView)view.findViewById(R.id.confirmationToastText); text.setText(Html.fromHtml(getString(R.string.help_dialog_fragment))); //get the OK button and add a Listener ((Button) view.findViewById(R.id.confirmationDialogButton)).setOnClickListener(new OnClickListener() { public void onClick(View v) { // When button is clicked, call up to owning activity. HelpDialog.this.dismiss(); } }); return view; } } 

而主要活动的创build过程如下:

 /** * Shows the HelpDialog Fragment */ private void showHelpDialog() { android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); HelpDialog helpDialog = new HelpDialog(); helpDialog.show(fm, "fragment_help"); } 

我真的不知道这个答案是否与Dialog相关,也适用于Android:如何创build一个没有标题的对话框?

我怎样才能摆脱这个称号?

只需在您的HelpDialog.onCreateView(...)添加这行代码HelpDialog.onCreateView(...)

 getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

这样你明确要求得到一个没有标题的窗口:)

编辑

正如@DataGraham@Blundell在下面的注释中指出的那样,在onCreateDialog()方法而不是onCreateView()添加无标题窗口的请求更为安全。 这样,当你不使用片段作为Dialog时,你可以防止ennoying NPE:

 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); // request a window without the title dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); return dialog; } 

对话框片段有setStyle方法,应该在视图创buildJava Doc之前调用。 也可以用相同的方法设置对话框的样式

 public static MyDialogFragment newInstance() { MyDialogFragment mDialogFragment = new MyDialogFragment(); //Set Arguments here if needed for dialog auto recreation on screen rotation mDialogFragment.setStyle(DialogFragment.STYLE_NO_TITLE, 0); return mDialogFragment; } 
 FragmentManager manager = getSupportFragmentManager(); SettingsDialog sd = new SettingsDialog(); sd.setStyle(DialogFragment.STYLE_NO_TITLE, 0); sd.show(manager, "settings_dialog"); 

将样式设置为Theme_Holo_Dialog_NoActionBar:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NORMAL, android.R.style.Theme_Holo_Dialog_NoActionBar); } 

尝试简单的方法

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_TITLE, 0); } 
 public class LoginDialog extends DialogFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.login_dialog, null); getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); return view; } }