【问题标题】:ConstraintLayout spacing between weighted Views?加权视图之间的ConstraintLayout间距?
【发布时间】:2018-05-29 01:32:26
【问题描述】:

我正在尝试构建一个 Android 用户界面,我需要 7 个框来显示一周中的几天。为了做到这一点,我决定使用 ConstraintLayout,以便能够在任何屏幕上自动调整视图大小。

我使用“spread_inside”属性在所有 7 个视图之间创建了一个链,但由于我将视图的宽度设置为 wrap_content,由于 TextViews 的性质,视图的宽度不相等。所以我尝试通过将所有 7 个视图的宽度设置为 0dp 来使它们具有相同的宽度。这可行,但视图之间没有空间。有没有办法在这 7 个视图之间添加一些间距?或者是否有另一种方法可以实现所有 7 个视图的“等宽”,同时在任何屏幕上保持自动调整大小的能力?这甚至可以使用 ConstraintLayout 还是我应该继续使用 LinearLayout 来处理这种事情? (如上一张截图所示)

我希望我的视图在屏幕小时缩小,而在屏幕大时扩大到一个水平。请参阅下面的屏幕截图,了解它现在的样子。我想在每个视图之间添加 8dp 填充(在 LinearLayout 上,我通过在宽度为 8dp 的布局上添加透明分隔线来实现此目的,如上一个屏幕截图所示)

它的外观,使用 LinearLayout 实现

【问题讨论】:

    标签: android android-layout layout android-constraintlayout


    【解决方案1】:

    如果您希望它们具有相同的宽度,您甚至不需要spread_inside,只需将宽度设置为0dp,然后为视图添加边距。例如:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <View
            android:id="@+id/view1"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_marginRight="4dp"
            android:layout_marginLeft="8dp"
            android:background="#ffff0000"
            app:layout_constraintEnd_toStartOf="@+id/view2"
            app:layout_constraintStart_toStartOf="parent"/>
    
        <View
            android:id="@+id/view2"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_marginRight="8dp"
            android:layout_marginLeft="4dp"
            android:background="#ff00ff00"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/view1"/>
    
    </android.support.constraint.ConstraintLayout>
    

    请记住,视图之间的空间将是 2 个边距的总和,第一个和最后一个视图将只有 1 个边距空间,因此您需要相应地设置它们(例如视图之间的边距为 4dp,第一个和最后一个边距为 8dp )

    【讨论】:

    • 谢谢!我会在早上试一试,然后告诉你。
    • 我想我现在会坚持使用 LinearLayout 和分隔线,因为它更容易管理一个可绘制的分隔线,而不是 7 个视图的左右(以及开始和结束)边距。感谢您的回复!
    • 这确实很有帮助,但是为什么这条链会这样工作呢?默认的不是还在传播吗?
    • @Eddnav 它是展开的,实际上元素会以相等的比例扩展它们的宽度以匹配父元素的宽度。如果您想为元素定义固定宽度,则可以删除边距
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多