项目之间的水平线性布局空间,没有左右填充

Posted

技术标签:

【中文标题】项目之间的水平线性布局空间,没有左右填充【英文标题】:Horizontal LinearLayout space between items without padding left and right 【发布时间】:2021-10-24 05:06:00 【问题描述】:

我需要 LinearLayout 中的项目之间的空间,而不需要在两侧进行填充。

这张图片会解释它:

这是 XML:

    <LinearLayout
        android:layout_
        android:layout_
        android:layout_marginBottom="32dp"
        android:orientation="horizontal">


        <ImageView
            android:id="@+id/rateOneStar"
            android:layout_
            android:layout_
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_star"
            app:tint="@color/ratingStarInactive" />

        <ImageView
            android:id="@+id/rateTwoStar"
            android:layout_
            android:layout_
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_star"
            app:tint="@color/ratingStarInactive" />

        <ImageView
            android:id="@+id/rateThreeStar"
            android:layout_
            android:layout_
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_star"
            app:tint="@color/ratingStarInactive" />

        <ImageView
            android:id="@+id/rateFourStar"
            android:layout_
            android:layout_
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_star"
            app:tint="@color/ratingStarInactive" />

        <ImageView
            android:id="@+id/rateFiveStar"
            android:layout_
            android:layout_
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_star"
            app:tint="@color/ratingStarInactive" />
    </LinearLayout>

【问题讨论】:

在你告诉我们忽略的部分,你应该写下你为实现这一目标所做的最佳尝试。 使用协调器布局。 developer.android.com/reference/androidx/coordinatorlayout/… 【参考方案1】:

编辑:更好的解决方案

在边缘视图上设置 layoutWeight 会移除它们周围的填充。

<LinearLayout
        android:id="@+id/requested"
        android:layout_
        android:layout_
        android:layout_marginBottom="32dp"
        android:orientation="horizontal"
        app:layout_constraintTop_toBottomOf="@id/original">


        <ImageView
            android:id="@+id/rateOneStar"
            android:layout_
            android:layout_
            android:layout_weight="0"
            app:srcCompat="@drawable/ic_round_credit_card_24"
            app:tint="@color/colorLightBlack" />

        <ImageView
            android:id="@+id/rateTwoStar"
            android:layout_
            android:layout_
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_round_credit_card_24"
            app:tint="@color/colorLightBlack" />

        <ImageView
            android:id="@+id/rateThreeStar"
            android:layout_
            android:layout_
            android:layout_weight="0"
            app:srcCompat="@drawable/ic_round_credit_card_24"
            app:tint="@color/colorLightBlack" />

        <ImageView
            android:id="@+id/rateFourStar"
            android:layout_
            android:layout_
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_round_credit_card_24"
            app:tint="@color/colorLightBlack" />

        <ImageView
            android:id="@+id/rateFiveStar"
            android:layout_
            android:layout_
            android:layout_weight="0"
            app:srcCompat="@drawable/ic_round_credit_card_24"
            app:tint="@color/colorLightBlack" />
    </LinearLayout>

【讨论】:

这样第一个和最后一个项目的一部分会被剪掉 然后在 -6dp 上降低边距值。您还可以在第一个和最后一个视图上使用 layoutWeight=0 这只会减少LinearLayout的宽度 我写的第一个解决方案应该可以工作,但是如果它带来了正确的结果,我找不到你为什么会如此关心的理由。我不知道你在寻找什么解决方案。然后切换到约束布局 图片清楚地解释了我想要存档的内容,您的“解决方案”不会导致我尝试存档的内容【参考方案2】:

我现在正在使用这个解决方案:

https://github.com/google/flexbox-layout

而不是线性布局:

    <com.google.android.flexbox.FlexboxLayout
        android:layout_
        android:layout_
        android:layout_marginBottom="32dp"
        app:justifyContent="space_between">

【讨论】:

以上是关于项目之间的水平线性布局空间,没有左右填充的主要内容,如果未能解决你的问题,请参考以下文章

Android - LinearLayout:如何在项目之间添加自动空间以水平填充布局

将 TextView 动态水平添加到等权线性布局

线性布局按钮之间的垂直空间“权重”

ANDROID 线性布局使用权重填充剩余空间

[android] 线性布局和布局的组合

垂直线性布局内的水平线性布局