代码之家  ›  专栏  ›  技术社区  ›  Blazej SLEBODA

linearlayout使用给定的空间值平均填充textviews

  •  0
  • Blazej SLEBODA  · 技术社区  · 5 年前

    我的设计要求如下:

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

    在表示要求的图像下方:

    enter image description here

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

    我的问题是,由于不同的文本长度,屏幕上的文本视图不相等。低于我的线性布局定义。

    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>
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   forpas    5 年前

    为了所有 View 你指定的 weight 您必须设置:

    android:layout_width="0dp"
    

    但问题是这样 Space S和 TextView S的宽度相同。
    我变了 android:weightSum 从7岁到19岁,每人体重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>
    
        2
  •  1
  •   Susmit Agrawal Sudip Bolakhe    5 年前

    使用 layout_width='0dp' TextView 如果使用的是具有水平线性布局的权重。

    另外,如果你必须使用 Space ,在分配权重时注意textView与空间的比率。例如,在您的情况下,权重分布可能是空间的权重为1,textview的权重为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>