Что не так с моим включением в RelativeLayout? - PullRequest
16 голосов
/ 10 июля 2010

Я хочу создать мероприятие с строкой заголовка вверху и панелью навигации внизу. Я использовал 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>

Ответы [ 2 ]

45 голосов
/ 16 декабря 2011

Чтобы переопределить атрибуты макета, который вы включаете, вы также должны переопределить как ширину макета, так и высоту макета. Если оба эти параметра не будут переопределены, любые другие изменения макета, которые вы попробуете, будут игнорироваться.

Ваш макет выше

<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"/>
0 голосов
/ 10 июля 2010

У вас нет ничего, чтобы заполнить пространство между верхней и нижней панелью по виду.

В качестве стороны, я склонен использовать LinearLayout и использовать атрибут layout_weight следующим образом;

title_bar & navigation_bar get layout_weight = "0" и содержимое между ними получает layout_weight = "1". Это говорит менеджеру макета развернуть содержимое, чтобы заполнить пространство между ними, если ваш линейный макет равен;

title_bar содержание navigation_bar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...