Что случилось с моим включением в RelativeLayout?
Я хочу создать действие с заголовком сверху и панель навигации внизу. Я использовал include
для включения макета панели заголовка и макета панели навигации в основной макет, как вы можете видеть ниже. В результате обе строки заголовка и панель навигации перейдут в верхнюю часть экрана. Может ли кто-нибудь сказать мне, почему? Спасибо!
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/home_widget" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background">
<include android:id="@+id/title_bar" layout="@layout/title_bar"
android:layout_alignParentTop="true" />
<include android:id="@+id/navigation_bar" layout="@layout/navigation_bar"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
[Изменить]
Я не нашел первопричины. Но следующие работы:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/home_widget"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/background">
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:id="@+id/title_bar" >
<include layout="@layout/title_bar" />
</RelativeLayout>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:id="@+id/navigation_bar" >
<include layout="@layout/navigation_bar" />
</RelativeLayout>
Ответы
Ответ 1
Чтобы переопределить атрибуты используемого макета, вы также должны переопределить как ширину макета, так и высоту макета. Если обе эти настройки не будут переопределены, любые другие изменения макета, которые вы попытаетесь, будут проигнорированы.
Ваш план выше
<include android:id="@+id/title_bar" layout="@layout/title_bar"
android:layout_alignParentTop="true"
/>
<include android:id="@+id/navigation_bar" layout="@layout/navigation_bar"
android:layout_alignParentBottom="true"/>
На самом деле должно быть с содержимым обертки или заполнить родительский элемент, если это необходимо.
<include android:id="@+id/navigation_bar" layout="@layout/navigation_bar" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
Ответ 2
У вас нет ничего, чтобы заполнить пространство между верхней и нижней панелью его внешностью.
В качестве стороны я предпочитаю использовать LinearLayout вместо этого и использовать атрибут layout_weight следующим образом:
title_bar и navigation_bar получают layout_weight = "0", а содержимое между ними получает layout_weight = "1". Это говорит менеджеру макета развернуть содержимое, чтобы заполнить пространство между ними, если ваш линейный макет:
title_bar
содержание
navigation_bar