使用layout_constraintVertical_weight分发TextView

时间:2017-05-18 15:46:05

标签: android textview android-constraintlayout

我对layout_constraintVertical_weight有轻微问题,我试图让两个TextView共享指定区域中可用的垂直空间量,但没有我手动分配这不会发生。我已经尝试在0dp中添加高度,但这不起作用,但它对于宽度完美无缺。这是我的XML:

    <?xml version="1.0" encoding="utf-8"?>
    <!-- Layout for a single list item -->
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="@dimen/list_item_height"
        android:background="@color/tan_background">

        <ImageView
            android:id="@+id/image"
            android:layout_width="@dimen/list_item_height"
            android:layout_height="@dimen/list_item_height"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/miwok_text_view"
            android:layout_width="0dp"
            android:layout_height="44dp"
            android:background="@color/category_colors"
            app:layout_constraintLeft_toRightOf="@+id/image"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_weight="1"
            tools:text="text1" />

        <TextView
            android:id="@+id/default_text_view"
            android:layout_width="0dp"
            android:layout_height="44dp"
            android:background="@color/category_numbers"
            app:layout_constraintLeft_toRightOf="@+id/image"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintVertical_weight="1"
            tools:text="text2" />

    </android.support.constraint.ConstraintLayout>

这是布局外观的img:https://i.stack.imgur.com/ZOs9y.png

2 个答案:

答案 0 :(得分:4)

您必须创建一个layout_height为0dp的链才能使其正常工作

为了创建链,链中的所有视图必须包含对该链中前一个和下一个项的约束,并且第一个和最后一个必须与父对齐

在你的情况下为了使这个工作,你必须做这样的事情:

 <TextView
        android:id="@+id/miwok_text_view"
        android:layout_width="0dp"

        --this should be 0dp otherwise it will not use weight
        android:layout_height="0dp"

        android:background="@color/category_colors"
        app:layout_constraintLeft_toRightOf="@+id/image"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"

        ---this is what you have to add--
        app:layout_constraintBottom_toTopOf="@+id/default_text_view"

        app:layout_constraintVertical_weight="1"
        tools:text="text1" />

    <TextView
        android:id="@+id/default_text_view"
        android:layout_width="0dp"
        -- again 0dp otherwise weight is ignored
        android:layout_height="0dp"

        android:background="@color/category_numbers"
        app:layout_constraintLeft_toRightOf="@+id/image"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"

        -- again add this to create a chain
        app:layout_constraintTop_toBottomOf="@+id/miwok_text_view"


        app:layout_constraintVertical_weight="1"
        tools:text="text2" />

在上述更改权重应该正常工作

答案 1 :(得分:1)

我设法使用指南完成了它。这是XML:

<?xml version="1.0" encoding="utf-8"?>
<!-- Layout for a single list item -->
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="@dimen/list_item_height"
    android:background="@color/tan_background">

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5" />


    <ImageView
        android:id="@+id/image"
        android:layout_width="@dimen/list_item_height"
        android:layout_height="@dimen/list_item_height"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/miwok_text_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/category_colors"
        app:layout_constraintBottom_toTopOf="@+id/guideline"
        app:layout_constraintLeft_toRightOf="@+id/image"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="text1" />

    <TextView
        android:id="@+id/default_text_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/category_numbers"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/image"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/miwok_text_view"
        tools:text="text2" />


</android.support.constraint.ConstraintLayout>

不确定这是最好的方法,但它有效:)