Фрагмент Android не считает match_parent как высоту - PullRequest
39 голосов
/ 29 октября 2011

Извините за огромный дамп кода, но я действительно потерян.

MyActivity.java onCreate:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_singlepane_empty);
mFragment = new PlacesFragment();
getSupportFragmentManager().beginTransaction()
                    .add(R.id.root_container, mFragment)
                    .commit();

PlacesFragment.java onCreateView:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
return mRootView;

Примечания : mRootView - глобальный элемент ViewGroup, я полагаю, в этом нет проблем.PlacesFragment - это ListFragment.

Макеты:

activity_singlepane_empty.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root_container"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00f">
    <include layout="@layout/actionbar"/>

    <!-- FRAGMENTS COME HERE! See match_parent above -->

</LinearLayout>

list_content.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listContainer"
        android:background="#990"
        >

        <ListView android:id="@android:id/list"
                android:layout_width="match_parent" 
                android:layout_height="match_parent"
                android:drawSelectorOnTop="false" />

        <TextView android:id="@id/android:empty"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:textAppearance="?android:attr/textAppearanceMedium" 
                android:text="@string/no_data_suggest_connection"/>

</FrameLayout>

Проблема: Как вы можете видеть, ожидаемое поведение будет иметь пустой TextView выше, чтобы отображаться по центру на экране.На предварительном просмотре дизайна в Eclipse все в порядке.Только при добавлении в root_view в качестве фрагмента FrameLayout не будет заполнять весь экран.

root_container имеет синий цвет, а FrameLayout желтоватый, см. Ниже для целей отладки. Разве желтая панель не должна заполнять весь экран?!?!?!?

enter image description here

Ответы [ 4 ]

72 голосов
/ 12 марта 2012

У меня была такая же проблема, и я думаю, что это происходит, когда вы надуваете макет в onCreateView фрагмента со значением null, как вы сделали здесь:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);

Вместо этого вы должны сделать это:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content,container, false);

Где контейнер - это группа просмотра. По крайней мере, это решило проблему для меня.

5 голосов
/ 06 мая 2016
<android.support.v4.widget.NestedScrollView
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:fillViewport="true"
    >

    <include layout="@layout/screen_main_fragment" />

</android.support.v4.widget.NestedScrollView>

Мне пришлось изменить layout_height = "wrap_content" на "match_parent", чтобы он работал.

4 голосов
/ 29 октября 2011

По какой-то причине FrameLayout не получает свой макет из XML.

Мне нужно установить его также в коде (onCreateView фрагмента):

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
FrameLayout fl = (FrameLayout) mRootView.findViewById(R.id.listContainer);
fl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
return mRootView;
0 голосов
/ 27 мая 2015

Я сделал так, чтобы создать прозрачное изображение в XML-коде, сделать фрагмент относительным макетом и сделать layout_alignParentBottom="true" в ImageView, таким образом, изображение прилипнет к основанию и заставит фрагмент заполнить родительский элемент.

Код здесь:

temp_transparent.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:thickness="0dp"
   android:shape="rectangle">
<gradient
    android:startColor="#00000000"
    android:endColor="#00000000"
    android:type="linear"
    android:angle="270"/>

фрагмент_мы_invites.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:id="@+id/my_invites_fragment"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:background="#ffffff">


<ListView
    android:id="@+id/list_invites"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="@color/list_divider"
    android:dividerHeight="1dp"
    android:layout_alignParentTop="true" >
</ListView>

<ImageView
    android:id="@+id/transparent_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/list_invites"
    android:src="@drawable/temp_transparent" />

...