对话框片段顶部的布局边距/填充设置

17

使用fragments时,我的布局出现了额外的顶部空间,我不知道这是从哪里来的。它看起来像这样:

enter image description here

有什么可能导致这个空白区域吗?主题或一些我尚未发现的样式设置,还是这个空间保留给操作栏?我真的很想摆脱它。

以下是相应的布局xml和实例化对话框的代码:

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_margin="5dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

        <ProgressBar
        android:layout_margin="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/search_progress"
        style="?android:attr/progressBarStyle"
        android:indeterminate="true" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/search_progress"
            android:text="Searching for:" />

        <TextView
            android:id="@+id/searchingNameTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:layout_alignBottom="@+id/search_progress"
            android:layout_alignLeft="@+id/textView1"
            android:text="Barcelona" />

</RelativeLayout>

Java:

FragmentManager fm = this.getSupportFragmentManager();
mSearchingDialog = new SearchingDialogFragment();
Bundle bundle = new Bundle();
bundle.putString("name", mCityToAdd.userName());
mSearchingDialog.setArguments(bundle);
mSearchingDialog.show(fm, TAG);

我也在这里提出了同样的问题,认为这可能与ScrollView相关,但是这个空间出现在我所有的片段中:

ScrollView adds extra space on top


可能是重复的问题:如何创建一个没有标题的DialogFragment? - Michael Allan
3个回答

25

在您的对话框的onCreate()onCreateView()方法中,在setContentView(R.layout.<dialog_layout>);之前立即调用getWindow().requestFeature(Window.FEATURE_NO_TITLE);


谢谢,但是该片段没有getWindon()方法。上面的代码就是我实例化对话框片段所做的全部操作,因此也没有onCreate()方法。 - Herr von Wurst
2
要访问窗口调用,请使用getActivity().getWindow()。在onCreateView()方法中调用它。 - sergej shafarenka
7
onCreateView()方法中,我执行了getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);,它起作用了。谢谢! - Herr von Wurst

22

DialogFragment顶部的空白区域,有两种重用或移除它的方法。

如果您想简单地删除它:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); //  <--
    View view = inflater.inflate(R.layout.fragment_dialog, container, false);
    return view;
}

如果您想将其重用为对话框标题:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     getDialog().setTitle("Some title..."); //  <--
     View view = inflater.inflate(R.layout.fragment_dialog, container, false);
     return view;
}

应该是被接受的答案,因为在DialogFragment中getWindow()无法工作。 - leonardkraemer

5
另一个解决方案:
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_TITLE, getActivity().getApplicationInfo().theme);
    }

这个示例使用应用程序默认主题。同时需要注意,setStyle() 方法需要在 onCreate() 中调用,而不是在 onCreateView() 中调用,以产生效果。


我使用了setStyle(STYLE_NO_TITLE, android.R.style.Theme_Dialog),因为从getActivity().getApplicationInfo()获取的主题会移除透明黑色覆盖层。 - Mikhail Sharin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接