使用“fill_parent”无法获得正确的布局

时间:2011-03-10 00:18:22

标签: android android-layout

我正在尝试在Android中创建这个简单的布局。

enter image description here

A 应该换行以适合其内容并left|center_vertical对齐。

B 应尽可能扩大,填补所有空白区域。

C 应该是右对齐的,包装以填充其内容并且还要对齐center_vertical

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:gravity="left|center_vertical">
    <!-- A -->
    <ImageView android:id="@+id/example_item_icon"
            android:layout_width="48px"
            android:layout_height="48px"/>
    <!-- B -->
    <LinearLayout android:orientation="vertical"
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
             android:gravity="left|center_vertical"
             android:padding="5px">

        <TextView android:id="@+id/example_item_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"/>

        <TextView android:id="@+id/example_item_level_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold|italic"
                android:lines="1"
                android:textSize="10px"/>
    </LinearLayout>
    <!-- C -->
    <TextView android:id="@+id/example_item_count_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="14px"/>
</LinearLayout>

在此布局中, C 被推离屏幕。如何使此布局有效?

4 个答案:

答案 0 :(得分:19)

fill_parent表示“与父级一样大”,而不是“使用剩余的空白区域”。而不是fill_parent,只需使用android:layout_width =“0dip”和android:layout_weight =“1”。

答案 1 :(得分:2)

技巧,使用相对布局......这是一个例子(在我的头顶 - 没有检查和缺少高度字段和垂直对齐设置,以便于查看重要的东西)。

<relativelayout android:width="fillParent">
    <textview android:id="@+id/left" android:text="left" 
              android:width="wrap_content"
              android:layout_alignParentleft="true" />
    <textview android:id="@+id/right" android:text="right"
              android:width="wrap_content"
              android:layout_alignParentright="true" />
    <textview android:id="@+id/middle" android:text="middle"
              android:width="wrap_content"
              android:layout_alignleft="@id/right" android:layout_alignright="@id/left" />
</relativelayout>

编辑:这里是打字错误(并且测试工作正常)

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<TextView
    android:id="@+id/left"
    android:text="left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" />
<TextView
    android:id="@+id/right"
    android:text="right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true" />
<TextView
    android:id="@+id/middle"
    android:text="middle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/right"
    android:layout_toRightOf="@id/left" />
</RelativeLayout>

答案 2 :(得分:0)

试试这个。我将ImageViews替换为TextViews,以便更容易地在XML编辑器中显示。请注意,我将48px宽度保持在“A”,这不是我认为你真正想要的。用wrap_content替换它。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:gravity="center_vertical">

    <!-- A -->
    <TextView android:layout_height="48px"
    android:id="@+id/example_item_count_text2"
    android:textSize="14px"
    android:layout_weight="1"
    android:text="this is item a"
    android:textStyle="bold"
    android:layout_width="48px">
    </TextView>

    <!-- B -->
    <LinearLayout android:orientation="vertical"
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
             android:gravity="center_vertical"
             android:layout_weight="1"
             android:padding="5px">

        <TextView android:id="@+id/example_item_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="this is B"
                android:textStyle="bold"/>

        <TextView android:id="@+id/example_item_level_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="this should be underneath B"
                >
    </LinearLayout>

    <!-- C -->
    <TextView android:id="@+id/example_item_count_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="this is item c"
            android:layout_weight="1"
            android:textStyle="bold"
            android:textSize="14px"/>
</LinearLayout>

答案 3 :(得分:0)

这是我的答案。我只是将 B 上的layout_weight设置为1。显然,layout_weight类似于基于百分比的布局方法。我不知道它是如何工作的,但这是我的成品,看起来很棒:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:gravity="left|center_vertical">

    <ImageView android:id="@+id/example_item_icon"
            android:layout_width="48px"
            android:layout_height="48px"/>

    <LinearLayout android:orientation="vertical"
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
             android:gravity="left|center_vertical"
             android:layout_weight="1"
             android:padding="5px">

        <TextView android:id="@+id/example_item_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"/>

        <TextView android:id="@+id/example_item_level_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold|italic"
                android:lines="1"
                android:textSize="10px"/>
    </LinearLayout>

    <TextView android:id="@+id/example_item_count_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="14px"/>
</LinearLayout>