Android Fragment не соответствует match_parent как высота
Извините за огромный дамп кода, но я действительно потерян.
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]()
Ответы
Ответ 1
У меня была такая же проблема и я подумал, что это происходит, когда вы раздуваете макет в Fragment onCreateView с нулевым значением, как вы это делали:
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
Вместо этого вы должны сделать это:
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content,container, false);
Где контейнер - группа просмотра. По крайней мере, это решило проблему для меня.
Ответ 2
По какой-то причине FrameLayout не получает свой макет из XML.
Мне нужно установить его также в коде (Fragment 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;
Ответ 3
<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
То, как я это делал, было создание прозрачного изображения в коде 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"/>
fragment_my_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" />