第二个片段已加载但在屏幕上不可见

时间:2016-02-03 21:34:44

标签: android android-layout

我在活动中添加了2个片段。启动后,我只看到标题栏但没有主UI。这是活动和布局的代码。如果我注释掉标题片段 - 主要UI显示出来。我确定它很简单,但无法弄清楚要改变什么以使它们都出现

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/login_activity_drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout  android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content">
        <!--<fragment android:name="com.idatt.activities.TitleBarFragment"-->
            <!--android:id="@+id/fr_title_bar"-->
            <!--android:layout_height="match_parent"-->
            <!--android:layout_width="match_parent"/>-->
        <fragment android:name="com.idatt.activities.LoginFragment"
            android:id="@+id/fr_login"
            android:layout_height="match_parent"
            android:layout_width="match_parent"/>
    </LinearLayout>

    <!-- The navigation drawer -->
    <ListView
        android:id="@+id/login_activity_drawer_list"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />

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

2 个答案:

答案 0 :(得分:3)

更改为wrap_content两个片段的layout_height。试试这个:

<LinearLayout  android:orientation="vertical"     
          android:layout_width="match_parent" 
          android:layout_height="wrap_content">
        <fragment android:name="com.idatt.activities.TitleBarFragment"
            android:id="@+id/fr_title_bar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"/>
        <fragment android:name="com.idatt.activities.LoginFragment"
            android:id="@+id/fr_login"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"/>
    </LinearLayout>

答案 1 :(得分:1)

当父视图(是LinearLayout)具有wrapcontent属性且子(每个片段)具有匹配的父属性时,您有2个视图向相反方向拉 - 一方面,您使LinearLayout尝试缩小自身到其内容的大小,另一方面,它的内容正在尝试(两者)伸展到他们父亲的大小。 另一个问题是:因为两个片段的高度都与它们的父母相匹配(这是一个垂直的线性布局),所以你得到的两个片段完全覆盖了线性布局,因此一个片段不会为另一个片段留下任何空间。

因此,您需要做的是获取每个片段的height属性并将其设置为“wrapcontent”,这将有效地解决这两个问题。 通过不匹配它们的父级大小,第一个片段将留下第二个片段可见的空间,并且因为线性布局包装其内容,所以两个片段的大小恰好完全适合。