возникли проблемы при установке animateLayoutChanges true на ConstraintLayout - PullRequest
0 голосов
/ 30 октября 2019

Я использую ConstraintLayout в качестве родительского макета и set android:animateLayoutChanges="true". при изменении видимости некоторых вложенных видов показывается мой слой (androidx.constraintlayout.helper.widget.Layer), который я использовал в качестве фона других представлений. без android: animateLayoutChanges все в порядке.

Я также попытался requestLaout() в методе post() виджета Группы (относится к некоторому вложенному представлению для действия show / hide) -> group.post { binding.bg.parent.requestLayout() }, и это работает. но этот способ показывает слой через короткое время, и я не хочу, чтобы это происходило.

вот мой XML-файл:

<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true"
        android:background="@color/defaultBackground">

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

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

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/top"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_begin="@dimen/action_bar_padding" />

        <androidx.constraintlayout.helper.widget.Layer
            android:id="@+id/bg"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="@drawable/bg_container"
            android:paddingLeft="@dimen/margin_high"
            android:paddingTop="@dimen/margin_low"
            android:paddingRight="@dimen/margin_high"
            android:paddingBottom="@dimen/margin_very_high"
            app:constraint_referenced_ids="radioGroup,submit"
            tools:ignore="MissingConstraints" />

        <RadioGroup
            android:id="@+id/radioGroup"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_high"
            app:layout_constraintLeft_toLeftOf="@id/left"
            app:layout_constraintRight_toRightOf="@id/right"
            app:layout_constraintTop_toTopOf="@id/top">

            <androidx.appcompat.widget.AppCompatRadioButton
                android:id="@+id/individual"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="start"
                android:checked="true"
                android:layoutDirection="rtl"
                android:text="@string/radio_individual_text"
                android:textColor="@color/colorGrayDarker"
                android:textSize="@dimen/text_size_mini" />

            <androidx.appcompat.widget.AppCompatRadioButton
                android:id="@+id/legal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="start"
                android:layoutDirection="rtl"
                android:text="@string/radio_legal_text"
                android:textColor="@color/colorGrayDarker"
                android:textSize="@dimen/text_size_mini" />
        </RadioGroup>

        <epeyk.mobile.baseutil.views.TextViewCustom
            android:id="@+id/text1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_very_high"
            android:text="@string/nation_id_description_text"
            android:textColor="@color/colorGrayDark"
            android:textSize="@dimen/text_size_very_mini"
            app:customFont="@font/iransans_farsi_numbers"
            app:layout_constraintLeft_toLeftOf="@id/left"
            app:layout_constraintRight_toRightOf="@id/right"
            app:layout_constraintTop_toBottomOf="@id/radioGroup" />

        <epeyk.mobile.baseutil.views.EditTextCustom
            android:id="@+id/nationalId"
            style="@style/mEditTextStyle"
            android:layout_width="0dp"
            android:layout_height="@dimen/edit_text_height_medium"
            android:layout_marginTop="@dimen/margin_low"
            android:background="@drawable/bg_input"
            android:hint="@string/national_id_description"
            android:inputType="number"
            app:customFont="@font/iransans_farsi_numbers"
            app:forceGravity="true"
            app:layout_constraintEnd_toEndOf="@id/right"
            app:layout_constraintStart_toEndOf="@id/confirm"
            app:layout_constraintTop_toBottomOf="@id/text1" />

        <epeyk.mobile.baseutil.views.TextViewCustom
            android:id="@+id/confirm"
            android:layout_width="@dimen/button_width_very_small"
            android:layout_height="@dimen/button_height_low"
            android:layout_marginRight="@dimen/margin_high"
            android:background="@drawable/btn_radius_primary"
            android:clickable="true"
            android:focusable="true"
            android:gravity="center"
            android:text="@string/confirm"
            android:textColor="@color/colorWhite"
            android:textSize="@dimen/text_size_small"
            app:forceGravity="true"
            app:layout_constraintBottom_toBottomOf="@id/nationalId"
            app:layout_constraintEnd_toStartOf="@id/nationalId"
            app:layout_constraintStart_toStartOf="@id/left"
            app:layout_constraintTop_toTopOf="@id/nationalId" />

        <epeyk.mobile.baseutil.views.TextViewCustom
            android:id="@+id/text2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_very_high"
            android:text="@string/company_info_text"
            android:textColor="@color/colorGrayDark"
            android:textSize="@dimen/text_size_very_mini"
            app:layout_constraintLeft_toLeftOf="@id/left"
            app:layout_constraintRight_toRightOf="@id/right"
            app:layout_constraintTop_toBottomOf="@id/nationalId" />

        <epeyk.mobile.baseutil.views.EditTextCustom
            android:id="@+id/companyName"
            style="@style/mEditTextStyle"
            android:layout_width="0dp"
            android:layout_height="@dimen/edit_text_height_medium"
            android:layout_marginTop="@dimen/margin_low"
            android:background="@drawable/bg_input"
            android:enabled="false"
            android:hint="@string/company_name"
            app:forceGravity="true"
            app:layout_constraintLeft_toLeftOf="@id/left"
            app:layout_constraintRight_toRightOf="@id/right"
            app:layout_constraintTop_toBottomOf="@id/text2" />

        <epeyk.mobile.baseutil.views.TextViewCustom
            android:id="@+id/submit"
            android:layout_width="@dimen/button_width_small"
            android:layout_height="@dimen/button_height_low"
            android:layout_marginTop="@dimen/margin_very_high"
            android:layout_marginBottom="@dimen/margin_high"
            android:background="@drawable/btn_radius_primary"
            android:clickable="true"
            android:focusable="true"
            android:gravity="center"
            android:text="@string/confirm_and_continue"
            android:textColor="@color/colorWhite"
            android:textSize="@dimen/text_size_small"
            app:forceGravity="true"
            app:layout_constraintLeft_toLeftOf="@id/left"
            app:layout_constraintRight_toRightOf="@id/right"
            app:layout_constraintTop_toBottomOf="@id/companyName" />

        <androidx.constraintlayout.widget.Group
            android:id="@+id/group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"
            app:constraint_referenced_ids="text1,nationalId,confirm,text2,companyName"
            tools:visibility="gone" />
    </androidx.constraintlayout.widget.ConstraintLayout>
...