LinearLayout有两个宽度相等的子节点

时间:2013-07-08 15:58:11

标签: android android-layout

我遇到一些问题,让LinearLayout的两个孩子拥有相同的宽度。这就是我得到的:

screenshot

这是灰色框的布局xml:

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2"
    android:background="@color/medium_grey"
    >

    <ImageView 
        android:id="@+id/profile_photo"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:src="@drawable/placeholder_profile_photo"
        android:scaleType="fitCenter"
        android:contentDescription="@string/blank"
        android:layout_weight="1"
        />

    <LinearLayout 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_weight="1"
        android:layout_gravity="center_vertical"
        android:background="@color/alert"
        >

        <TextView
            android:id="@+id/profile_rate_header"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Rate User"
            />

        <LinearLayout 
            android:id="@+id/profile_action_rate_user"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_weight="1"
            android:gravity="center"
            >

            <ImageView 
                android:id="@+id/profile_action_rate_up"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/user_rate_up"
                />

            <ImageView 
                android:id="@+id/profile_action_rate_down"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/user_rate_down"
                />

        </LinearLayout>
    </LinearLayout>
</LinearLayout>

我假设设置根layout_weight的子项的LinearLayout以及weightSum和宽度0dp会产生所需的效果(图像是与粉红色'费率用户'部分相同的大小)然而事实并非如此。

我错过了什么?

修改

这就是我希望它看起来像

enter image description here

照片和粉红色的线性布局应该是相等的宽度。

5 个答案:

答案 0 :(得分:23)

android:weightSum="2"应位于两个子ImageViews的父级上,而不是上级父级。或者尝试设置权重0.5并查看它是否有效。

此外,使用此类权重时,两个图片视图的宽度应为android:layout_width="0dp"

接下来,放大图片以填充空间。详情here

答案 1 :(得分:10)

同等重视儿童

要创建一个线性布局,其中每个孩子在屏幕上使用相同的空间量,请将每个视图的android:layout_height设置为&#34; 0dp&#34; (对于垂直布局)或每个视图的android:layout_width为&#34; 0dp&#34; (用于水平布局)。然后将每个视图的android:layout_weight设置为&#34; 1&#34;。 请参阅:http://developer.android.com/guide/topics/ui/layout/linear.html

答案 2 :(得分:2)

这是你想要的:

尝试这个xml @boz:它将在所有大小的布局中运行......!

<?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" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight=".50"
        android:background="@drawable/ic_launcher" >
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight=".50"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="33.33" >
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="33.33"
            android:background="@android:color/darker_gray" >
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="33.33" >
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

我采用两种线性布局(50%,50%)和三种子线性布局(33.33%,33.33%,33.33%)。其中有三种布局,第二种布局是你的粉红色。

如果还有任何疑问,请问。

答案 3 :(得分:1)

从父视图中删除权重总和(@+id/profile_action_rate_user)。

答案 4 :(得分:0)

你可以使用这样的东西,希望这符合你的要求。 试试这个xml。

<?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="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@color/Black"
        android:gravity="center"
        android:orientation="vertical" 
        android:layout_weight="0.5"
        >

        <TextView
            android:id="@+id/profile_rate_header"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Rate User"
            />

        <LinearLayout 
            android:id="@+id/profile_action_rate_user"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center"
            >

            <ImageView 
                android:id="@+id/profile_action_rate_up"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/close"
                />

            <ImageView 
                android:id="@+id/profile_action_rate_down"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/close"
                />

        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="0.5"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/profile_photo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleType="fitCenter"
            android:src="@drawable/close" />

    </LinearLayout>

</LinearLayout>


</LinearLayout>