如何实现像这样具有固定百分比宽度的 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>
但是尽管我设置了一些权重属性,但我最终得到的结果如下:
所以:
- 我是否必须在 de LinearLayout 中为所有子项设置权重?我如何处理 "fixed" 宽度元素(如左栏和行分隔符)。
- 有更好的方法吗?
提前致谢。
布局权重作为块中所有元素的比率。因此,例如,如果您在 linearlayout
中有三个 textviews
,权重分别为 1、2 和 1,则第二个 textview
将是其他两个的两倍,或占 50%可用 space。总和并不重要,只是数字之间的比率,所以在上面的例子中我可以使用 0.5:1:0.5 或 100:200:100,结果是一样的。
所以在你的代码中,在最外面的 LinearLayout
你只有三个项目有权重:第一个 TextView
和两个嵌套的 LinearLayout
s,分别为 0.5、0.3 和 0.2分别。因此 Android 将为所有固定宽度元素提供 space,然后在剩余的 space 中,TextView
将获得 5/10,LinearLayout
s 将获得 3/10 和 2/10。
此外,如果具有权重的项目在拉伸方向上的大小为 0dp,则权重效果最佳。如果您使用的是 Android Studio,它应该会向您发出警告。
我正在尝试为 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>
但是尽管我设置了一些权重属性,但我最终得到的结果如下:
所以:
- 我是否必须在 de LinearLayout 中为所有子项设置权重?我如何处理 "fixed" 宽度元素(如左栏和行分隔符)。
- 有更好的方法吗?
提前致谢。
布局权重作为块中所有元素的比率。因此,例如,如果您在 linearlayout
中有三个 textviews
,权重分别为 1、2 和 1,则第二个 textview
将是其他两个的两倍,或占 50%可用 space。总和并不重要,只是数字之间的比率,所以在上面的例子中我可以使用 0.5:1:0.5 或 100:200:100,结果是一样的。
所以在你的代码中,在最外面的 LinearLayout
你只有三个项目有权重:第一个 TextView
和两个嵌套的 LinearLayout
s,分别为 0.5、0.3 和 0.2分别。因此 Android 将为所有固定宽度元素提供 space,然后在剩余的 space 中,TextView
将获得 5/10,LinearLayout
s 将获得 3/10 和 2/10。
此外,如果具有权重的项目在拉伸方向上的大小为 0dp,则权重效果最佳。如果您使用的是 Android Studio,它应该会向您发出警告。