如何实现具有固定百分比宽度的LinearLayout?

时间:2015-09-26 23:53:31

标签: android android-layout android-layout-weight

我正在尝试为CardView实现以下布局:

What I want

每个都是不同的CardView

我希望每个CardView都具有相同的“列”宽度。我对重量属性知之甚少,我想我错了。据我所知,weight属性将告诉元素的“优先级”到ocuppy space。我试过这个解决方案:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginBottom="2dp"
android:layout_marginTop="2dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:id="@+id/main_flat_item"
 >

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

    <com.example.myapp.VerticalTextView
        android:text="CODE"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:background="@color/td_main_blue"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="@color/white" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Title"
        android:textSize="20sp"
        android:padding="5dp"
        android:layout_weight="0.5"
        />

    <View
        android:layout_width="1dp"
        android:layout_height="70dp"
        android:layout_gravity="center"
        android:background="@color/grayE" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_weight="0.3">

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

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Taxa compra"
                android:textSize="12sp"
                android:textColor="@color/grayB"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Taxa Compra"
                android:textSize="16sp"
                android:textColor="@color/td_green"/>

        </LinearLayout>


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

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Taxa venda"
                android:textSize="12sp"
                android:textColor="@color/grayB"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Taxa Venda"
                android:textSize="16sp"
                android:textColor="@color/td_red" />

        </LinearLayout>

    </LinearLayout>

    <View
        android:layout_width="1dp"
        android:layout_height="70dp"
        android:layout_gravity="center"
        android:background="@color/grayE" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.2"
        android:layout_gravity="center"
        android:gravity="center">

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:button="@drawable/star_checkbox" />

    </LinearLayout>

</LinearLayout>


</android.support.v7.widget.CardView>

但是,尽管我已经设定了一些重量属性,但我最终得到的结果是:

Result example :(

所以:

  • 我必须为de LinearLayout中的所有孩子设定体重吗?如何处理“固定”宽度元素(如左栏和行分隔符)。
    • 有更好的方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

布局权重作为块中所有元素的比率。例如,如果textviews中有三个linearlayout,权重为1,2和1,则第二个textview将是其他两个的两倍,或占用50%可用空间。总和无关紧要,只是数字之间的比例,所以在上面的例子中我可以使用0.5:1:0.5或100:200:100,它会出现相同的结果。

因此,在您的代码中,在最外面的LinearLayout中,您只有三个具有权重的项目:第一个TextView和两个嵌套LinearLayout,分别为0.5,0.3和0.2。因此,Android将为所有固定宽度的元素提供空间,然后在剩余空间中,TextView将获得5/10,LinearLayout将获得3/10和2/10。

此外,如果重量项目在拉伸方向上的大小为0dp,则重量最佳。如果您使用的是Android Studio,它应该会给您一个警告。