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.
3 Réponses :
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
Vous devez utiliser
dans
et redéfinir
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>
Ce bogue est toujours présent dans la version beta1. Avez-vous pu signaler le problème?