如何从 DialogFragment 中删除标题?

how to remove title from DialogFragment?

我在我的项目中使用 DialogFragment,我正在使用

禁用标题
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

但是我的对话框变歪了。我想保留对话框原样,只删除标题。我该怎么办?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"
                 android:orientation="vertical" android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:background="#ff2d35ff">


     <LinearLayout
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginRight="39dp"
         android:layout_marginLeft="39dp"
         android:layout_gravity="center_horizontal"
         android:background="#ff6cff23">

         <LinearLayout
             android:orientation="horizontal"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal">

             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="ItemName"
                 android:id="@+id/itemName"
                 android:layout_weight="1"
                 android:background="#ffd861ff"/>

             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="ItemPrice"
                 android:id="@+id/itemPrice"
                 android:layout_weight="1"
                 android:background="#ff2ff8ff"/>
     </LinearLayout>

     <ImageView
         android:layout_width="100dp"
         android:layout_height="100dp"
         android:id="@+id/itemImage"
         android:layout_gravity="center_horizontal"/>

     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="some test"
         android:id="@+id/textView9"
         android:layout_gravity="center_horizontal"/>

     <LinearLayout
         android:orientation="horizontal"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="center_horizontal"
         android:background="#ffffff2c">

         <Button
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="-"
             android:id="@+id/itemMinus"
             />

         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="1"
             android:id="@+id/textView11"
             android:layout_weight="1"
             android:gravity="center_horizontal"/>

         <Button
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="+"
             android:id="@+id/itemPlus"/>
     </LinearLayout>

 </LinearLayout>

 <LinearLayout
     android:orientation="horizontal"
     android:layout_width="match_parent"
     android:layout_height="fill_parent"
     android:layout_gravity="center_horizontal"
     android:gravity="center_horizontal">

     <ImageButton
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/itemAdd"
         android:src="@drawable/positive"
         android:background="@android:color/transparent"/>

     <ImageButton
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/itemCancel"
         android:src="@drawable/negative"
         android:background="@android:color/transparent"/>
 </LinearLayout>

我发现当我删除标题对话框时找不到match_parent

我通常在 DialogFragment 的子类中覆盖 onCreate 并调用 setStyle(STYLE_NO_TITLE, 0);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, 0);
}

Here 您可以找到 setStyle 的文档。 STYLE_NO_TITLE 的文档说:

Style for setStyle(int, int): don't include a title area.

您必须在 dialogfragment class 中覆盖 onCreateDialog 方法。

@Override
   public Dialog onCreateDialog(final Bundle savedInstanceState) {
      RelativeLayout root = new RelativeLayout(getActivity());
      root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
      final Dialog dialog = new Dialog(getActivity());
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
      dialog.setContentView(root);
      dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
      dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

      return dialog;
   }

您可以像下面的代码一样以更简单的方式实现 -

Dialog dialog = new Dialog(mContext, android.R.style.Theme_Black_NoTitleBar);

Dialog dialog = new Dialog(mContext, android.R.style.Theme_Black_NoTitleBar_Fullscreen);