LinearLayout使用给定的空间值同等填充textviews

问题描述 投票:0回答:2

我的设计要求如下:

有三个带有可变文本的文本视图,它们之间的间距为10dp。文本视图和间隔符必须是空白容器的一部分,其宽度等于屏幕宽度。

下面是代表要求的图片:

enter image description here

在我的实现中,我使用与父宽度匹配的LinearLayout,文本视图的权重等于1,以及容器和权重等于1的文本视图之间的空间视图。

我的问题是由于文本长度不同,文本视图在屏幕上不相同。在我的LinearLayout定义下面。

enter image description here

我的问题是:是否可以像设计师的要求一样编写LinearLyout视图,或者我应该以编程方式编写它?

<LinearLayout
        android:layout_width="0dp"
        android:layout_height="80dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:id="@+id/view_infrastructure_status"
        app:layout_constraintTop_toBottomOf="@+id/separator_under_course_list"
        android:gravity="center_horizontal|center_vertical"
        android:orientation="horizontal"
        android:weightSum="7"

        >

    <Space
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

    <TextView
            android:layout_width="wrap_content"
            android:text="Parking \n open"
            android:layout_height="wrap_content"
            android:textAlignment="gravity"
            android:layout_weight="1"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:background="@drawable/bng_button"
            android:gravity="center_horizontal|center_vertical"/>

    <Space
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

    <TextView
            android:layout_width="wrap_content"
            android:text="Restaurant\nopen"
            android:layout_height="wrap_content"
            android:textAlignment="gravity"
            android:layout_weight="1"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:background="@drawable/bng_button"
            android:gravity="center_horizontal|center_vertical"/>

    <Space
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

    <TextView
            android:layout_width="wrap_content"
            android:text="Shop\nopen"
            android:layout_height="wrap_content"
            android:textAlignment="gravity"
            android:layout_weight="1"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:background="@drawable/bng_button"
            android:gravity="center_horizontal|center_vertical"/>

    <Space
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
</LinearLayout>
android android-linearlayout
2个回答
1
投票

对于你指定View的所有weights,你必须设置:

android:layout_width="0dp"

但问题是,这样所有的Spaces和TextViews将具有相同的宽度。 我将android:weightSum从7改为19,并给每个TextView重量5。 所以:

1(Space) + 5(TextView) + 1(Space) + 5(TextView) + 1(Space) + 5(TextView) + 1(Space) = 19

您可以根据需要进行调整。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="80dp"
    app:layout_constraintTop_toBottomOf="@+id/separator_under_course_list"
    android:id="@+id/view_infrastructure_status"
    android:gravity="center_horizontal|center_vertical"
    android:orientation="horizontal"
    android:weightSum="19">

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <TextView
        android:layout_width="0dp"
        android:text="Parking \n open"
        android:layout_height="wrap_content"
        android:textAlignment="gravity"
        android:layout_weight="5"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:background="@drawable/bng_button"
        android:gravity="center_horizontal|center_vertical"/>

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <TextView
        android:layout_width="0dp"
        android:text="Restaurant\nopen"
        android:layout_height="wrap_content"
        android:textAlignment="gravity"
        android:layout_weight="5"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:background="@drawable/bng_button"
        android:gravity="center_horizontal|center_vertical"/>

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <TextView
        android:layout_width="0dp"
        android:text="Shop\nopen"
        android:layout_height="wrap_content"
        android:textAlignment="gravity"
        android:layout_weight="5"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:background="@drawable/bng_button"
        android:gravity="center_horizontal|center_vertical"/>

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
</LinearLayout>

1
投票

如果使用具有水平LinearLayout的权重,请将layout_width='0dp'TextViews一起使用。

此外,如果您必须使用Space,请在分配权重时注意textview到space的比例。例如,在您的情况下,权重分布对于空间可以是1的权重,对于文本视图可以是3的权重。相应地更改layout_weightsum的值。

示例xml代码:

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="80dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    android:id="@+id/view_infrastructure_status"
    app:layout_constraintTop_toBottomOf="@+id/separator_under_course_list"
    android:gravity="center_horizontal|center_vertical"
    android:orientation="horizontal"
    android:weightSum="xx">
    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <TextView
        android:layout_width="0dp"
        android:text="Parking \n open"
        android:layout_height="wrap_content"
        android:textAlignment="gravity"
        android:layout_weight="3"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:background="@drawable/bng_button"
        android:gravity="center_horizontal|center_vertical"/>

    ....
</LinearLayout>
© www.soinside.com 2019 - 2024. All rights reserved.