2
votes

Impossible de modifier la visibilité de TextInputLayout dans MotionLayout

J'essaye MotionLayout pour la première fois et j'ai des problèmes pour modifier la visibilité de TextInputLayouts dans mon MotionScene .

p> motion_scene.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.motion.MotionLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layoutDescription="@xml/motion_scene"
        tools:context=".MainActivity">

....

    <android.support.design.widget.TextInputLayout
            android:layout_width="282dp"
            android:layout_height="wrap_content"
            android:hint="Username"
            android:layout_marginEnd="8dp"
            app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="8dp"
            app:layout_constraintStart_toStartOf="parent" android:id="@+id/sign_in_username_tf"
            android:layout_marginTop="1dp" app:layout_constraintTop_toBottomOf="@+id/app_slogan"
            android:visibility="gone">

        <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fontFamily="@font/nunito_sans" android:textSize="20sp"
                android:textColor="@color/colorPrimaryLi"/>
    </android.support.design.widget.TextInputLayout>
    <android.support.design.widget.TextInputLayout
            android:layout_width="282dp"
            android:layout_height="wrap_content"
            android:hint="Password" app:hintEnabled="true"
            app:hintAnimationEnabled="true"
            android:layout_marginStart="8dp"
            app:layout_constraintStart_toStartOf="parent" android:layout_marginEnd="8dp"
            app:layout_constraintEnd_toEndOf="parent" android:id="@+id/sign_in_password_tf"
            android:layout_marginTop="1dp" app:layout_constraintTop_toBottomOf="@+id/sign_in_username_tf"
            android:visibility="gone">

        <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fontFamily="@font/nunito_sans" android:textSize="20sp"
                android:textColor="@color/colorPrimaryLi"/>
    </android.support.design.widget.TextInputLayout>

    ....

</android.support.constraint.motion.MotionLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<MotionScene
        xmlns:motion="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android">

    <Transition
            motion:constraintSetStart="@id/afinstall"
            motion:constraintSetEnd="@id/signin"
            motion:duration="1000">

        <OnClick
                motion:targetId="@id/button_sign_in"
                motion:clickAction="transitionToEnd"/>

        <OnClick

        />

    </Transition>

    <Transition
            motion:constraintSetEnd="@id/afinstall"
            motion:constraintSetStart="@id/signin"
            motion:duration="1000">

        <OnClick
                motion:targetId="@id/button_back"
                motion:clickAction="transitionToEnd"/>

        <OnClick

        />

    </Transition>

    .............

    <ConstraintSet android:id="@+id/afinstall">

        ....

        <Constraint
                android:layout_width="282dp"
                android:layout_height="wrap_content"
                android:hint="Username"
                android:layout_marginEnd="8dp"
                motion:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="8dp"
                motion:layout_constraintStart_toStartOf="parent" android:id="@+id/sign_in_username_tf"
                android:layout_marginTop="1dp" motion:layout_constraintTop_toBottomOf="@+id/app_slogan"
                android:visibility="gone" />
        <Constraint
                android:layout_width="282dp"
                android:layout_height="wrap_content"
                android:hint="Password"
                android:layout_marginStart="8dp"
                motion:layout_constraintStart_toStartOf="parent" android:layout_marginEnd="8dp"
                motion:layout_constraintEnd_toEndOf="parent" android:id="@+id/sign_in_password_tf"
                android:layout_marginTop="1dp" motion:layout_constraintTop_toBottomOf="@+id/sign_in_username_tf"
                android:visibility="gone"/>

         ....
    </ConstraintSet>

    <ConstraintSet android:id="@+id/signin">

    ....

    <Constraint
                android:layout_width="282dp"
                android:layout_height="wrap_content"
                android:hint="Username"
                android:layout_marginEnd="8dp"
                motion:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="8dp"
                motion:layout_constraintStart_toStartOf="parent" android:id="@+id/sign_in_username_tf"
                android:layout_marginTop="110dp" motion:layout_constraintTop_toBottomOf="@+id/app_slogan"
                android:visibility="visible"/>
        <Constraint
                android:layout_width="282dp"
                android:layout_height="wrap_content"
                android:hint="Password"
                android:layout_marginTop="15dp"
                motion:layout_constraintTop_toBottomOf="@+id/sign_in_username_tf" android:layout_marginStart="8dp"
                motion:layout_constraintStart_toStartOf="parent" android:layout_marginEnd="8dp"
                motion:layout_constraintEnd_toEndOf="parent" android:id="@+id/sign_in_password_tf"
                android:visibility="visible"/>

    ....

    </ConstraintSet>

</MotionScene>

J'ai essayé de bidouiller les choses mais je n'ai pas pu expliquer pourquoi cela se produisait réellement.

Veuillez ne pas marquer cela comme un doublon car c'est une bibliothèque assez récente que j'essaie. Je serais heureux d'élaborer davantage si nécessaire.


1 commentaires

Ce bogue est toujours présent dans la version beta1. Avez-vous pu signaler le problème?


3 Réponses :


3
votes

J'ai trouvé qu'actuellement (alpha 5) la visibilité cange ne fonctionne pas (cela fonctionne si vous le définissez dans des ensembles de contraintes, mais pas sur les événements ou les ensembles d'images clés) Pour contourner le problème, j'utilise alpha 0-1 pour rendre la vue visible ou non et ajouter des écouteurs incode pour la rendre cliquable


0 commentaires

1
votes

Vous devez utiliser dans et redéfinir


0 commentaires

0
votes

Plutôt que de déclarer la visibilité sur la contrainte, vous pouvez essayer de déclarer la visibilité comme un attribut personnalisé. Donc, pour votre première contrainte, essayez ceci:

Visible = 0
Invisible = 4
Gone = 8

En déclarant la visibilité comme un attribut personnalisé, cela devrait aider la disposition de mouvement à interpoler correctement entre les valeurs de visibilité. C'est un peu peu intuitif quelle valeur int est quelle visibilité mais elles sont définies comme suit

 <Constraint
            android:layout_width="282dp"
            android:layout_height="wrap_content"
            android:hint="Username"
            android:layout_marginEnd="8dp"
            motion:layout_constraintEnd_toEndOf="parent" 
            android:layout_marginStart="8dp"
            motion:layout_constraintStart_toStartOf="parent" 
            android:id="@+id/sign_in_username_tf"
            android:layout_marginTop="1dp"
            motion:layout_constraintTop_toBottomOf="@+id/app_slogan" >
    <CustomAttribute
        motion:attributeName="visibility"
        motion:customIntegerValue="8" />
</Constraint>


0 commentaires