Android 横向LinearLayout设置子项间距且无左右两侧内边距的问题
实现方案
你可以通过以下两种常用方案实现需求,都能保证LinearLayout左右两侧无内边距,仅子项之间存在间距:
方案1:给子项设置边距(子项数量少时使用,简单直接)
仅需要给第2到第5个ImageView添加layout_marginStart属性即可,第一个子项不加边距保证左侧无留白,最后一个子项不加右侧边距保证右侧无留白:
<LinearLayout android:layout_width="240dp" android:layout_height="match_parent" android:layout_marginBottom="32dp" android:orientation="horizontal"> <ImageView android:id="@+id/rateOneStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> <ImageView android:id="@+id/rateTwoStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_marginStart="8dp" <!-- 间距数值可自行调整 --> android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> <ImageView android:id="@+id/rateThreeStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_marginStart="8dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> <ImageView android:id="@+id/rateFourStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_marginStart="8dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> <ImageView android:id="@+id/rateFiveStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_marginStart="8dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> </LinearLayout>
方案2:使用LinearLayout自带分隔符(子项数量多/需要复用的时候使用,代码更简洁)
不需要修改子项属性,仅配置LinearLayout的分隔符即可:
- 先在
res/drawable目录下新建space_divider.xml分隔符文件:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="8dp" <!-- 间距数值可自行调整 --> android:height="0dp" /> <solid android:color="@android:color/transparent" /> </shape>
- 给LinearLayout添加分隔符配置:
<LinearLayout android:layout_width="240dp" android:layout_height="match_parent" android:layout_marginBottom="32dp" android:orientation="horizontal" android:divider="@drawable/space_divider" android:showDividers="middle" <!-- 仅在子项中间显示分隔符,左右两端不显示 --> android:dividerPadding="0dp"> <!-- 子项代码和你原有代码完全一致,不需要修改 --> <ImageView android:id="@+id/rateOneStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> <ImageView android:id="@+id/rateTwoStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> <ImageView android:id="@+id/rateThreeStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> <ImageView android:id="@+id/rateFourStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> <ImageView android:id="@+id/rateFiveStar" android:layout_width="32dp" android:layout_height="32dp" android:layout_weight="1" app:srcCompat="@drawable/ic_star" app:tint="@color/ratingStarInactive" /> </LinearLayout>
内容的提问来源于stack exchange,提问作者TheGreatCornholio
相关产品推荐
相关产品推荐

