Руководство по ограничению макета в процентах от размера экрана не работает

У меня есть макет, который имеет древовидную иерархию компонентов.

Основной макет ограничения› дочерний ImageView дочерний вложенный макет ограничения › макет ограничения

Изображение ограничено до 20% сверху и 50% снизу, в то время как вложенный макет ограничен до 30%.

Моя логика заключалась в том, что разница в нижнем ограничении изображения - ограниченное вложенное представление макета, которое

50-30 = 20%

Поэтому, если я помещу свой TextView во вложенный макет с ограничением 20 %, › TextView в макете Constraint NestedScrollView должен помещаться прямо под< /strong> представление изображения макета родительского ограничения.

Но когда я тестировал эту логику на мобильных устройствах с 4, 5 и 6, процентное значение ограничения кажется неправильным, и поверх TextView появляется пустое пространство.

4Mobile| 5Mobile| 6Mobile

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/gradient_bck"
    android:clickable="true"
    android:focusable="true">

    <View
        android:id="@+id/layout_show_all_gradient_bck"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/bck_primary_gradient"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="@+id/img_top"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.material.imageview.ShapeableImageView
        android:id="@+id/img_top"
        style="@style/CornerShape10"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:elevation="1dp"
        android:scaleType="centerCrop"
        app:layout_constraintBottom_toTopOf="@+id/guideline22"
        app:layout_constraintEnd_toStartOf="@+id/guideline26"
        app:layout_constraintStart_toStartOf="@+id/guideline25"
        app:layout_constraintTop_toTopOf="@+id/guideline9"
        app:layout_constraintVertical_bias="1.0"
        app:srcCompat="@drawable/test_img" />

    <androidx.core.widget.NestedScrollView
        android:id="@+id/layout_nested"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@drawable/bck_cat_details_view"
        android:fillViewport="true"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline24"
        app:layout_constraintVertical_bias="0.0">


        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tv_details"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                app:layout_constraintEnd_toStartOf="@+id/guideline30"
                app:layout_constraintStart_toStartOf="@+id/guideline29"
                app:layout_constraintTop_toTopOf="@+id/guideline28"
                 />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/tv_facts"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/txt_facts"
                app:layout_constraintStart_toStartOf="@+id/guideline29"
                app:layout_constraintTop_toBottomOf="@+id/tv_test_details"
                app:textAllCaps="true" />


            <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/tv_msg_facts"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                app:layout_constraintEnd_toStartOf="@+id/guideline30"
                app:layout_constraintStart_toStartOf="@+id/guideline29"
                app:layout_constraintTop_toBottomOf="@+id/tv_facts"
              />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/tv_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TITLE"
                app:layout_constraintStart_toStartOf="@+id/guideline29"
                app:layout_constraintTop_toBottomOf="@+id/tv_msg_facts"
                app:textAllCaps="true" />


            <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/tv_msg_title"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                app:layout_constraintEnd_toStartOf="@+id/guideline30"
                app:layout_constraintStart_toStartOf="@+id/guideline29"
                app:layout_constraintTop_toBottomOf="@+id/tv_title"
                />
            <Space
                android:id="@+id/space_bottom_extra"
                android:layout_width="match_parent"
                android:layout_height="80dp"
                app:layout_constraintTop_toBottomOf="@+id/tv_msg_title" />

            <androidx.constraintlayout.widget.Guideline
                android:id="@+id/guideline29"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_constraintGuide_percent="0.10" />

            <androidx.constraintlayout.widget.Guideline
                android:id="@+id/guideline30"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_constraintGuide_percent="0.90" />

            <androidx.constraintlayout.widget.Guideline
                android:id="@+id/guideline31"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                app:layout_constraintGuide_percent="0.73" />

            <androidx.constraintlayout.widget.Guideline
                android:id="@+id/guideline28"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                app:layout_constraintGuide_percent="0.20" />

        </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.core.widget.NestedScrollView>

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.20"
        app:layout_constraintTop_toTopOf="parent" />

  

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline23"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.05" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline24"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.35" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline22"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline25"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.1" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline26"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.9" />

      <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline27"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.10" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline32"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.92" />

</androidx.constraintlayout.widget.ConstraintLayout>

person Ravi Parmar    schedule 16.08.2020    source источник


Ответы (1)


Как вы, возможно, уже поняли, макет внутри NestedScrollView увеличивает свою высоту настолько, насколько он соответствует своему содержимому, несмотря на определенный вами атрибут layout_height="match_patrent". Зная, что вы должны найти замену senario для создания макета внутри NestedScrollView, например, используя абсолютные значения измерения вместо процентов.

person Sdghasemi    schedule 16.08.2020