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

How to achieve a LinearLayout with fixed percentage width like this?

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

每一张都是不同的CardView

我希望每个 CardView 都具有相同的 "columns" 宽度。我对 weight 属性 知之甚少,我想我用错了。据我所知,权重 属性 会告诉元素的 "priority" 占据 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>

但是尽管我设置了一些权重属性,但我最终得到的结果如下:

所以:

提前致谢。

布局权重作为块中所有元素的比率。因此,例如,如果您在 linearlayout 中有三个 textviews,权重分别为 1、2 和 1,则第二个 textview 将是其他两个的两倍,或占 50%可用 space。总和并不重要,只是数字之间的比率,所以在上面的例子中我可以使用 0.5:1:0.5 或 100:200:100,结果是一样的。

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

此外,如果具有权重的项目在拉伸方向上的大小为 0dp,则权重效果最佳。如果您使用的是 Android Studio,它应该会向您发出警告。