Je me demande si quelqu'un d'autre a connu cet étrange bogue. Ma mise en page est compliquée mais essentiellement, il s'agit de rangées de porte-visions avec les champs EditText.
Cela a fonctionné parfaitement jusqu'à ce que j'ai mis à jour mon SDK cible à API 30.
Après avoir ciblé API 30, Certains de mes champs EditText Ne répondez pas à "Focus Touch Events" (la poignée du curseur ne s'affiche pas, vous pouvez 'T Appuyez longuement sur, et vous ne pouvez sélectionner aucun texte). Vous pouvez toujours taper sur le champ et déplacer le curseur en tapant. Encore une fois, certains champs de texte fonctionnent parfaitement bien que d'autres sont affectés par ce bogue.
^ L'image n'est pas de mon application, juste pour montrer le gestionnaire de curseur pour la compréhension.
La disposition de contrainte et la disposition linéaire ont le même bug.
<!-- in constraint layout -->
<androidx.appcompat.widget.AppCompatEditText
Android:id="@+id/myTextField"
Android:layout_height="wrap_content"
Android:layout_width="0dp"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<!-- in linear layout -->
<androidx.appcompat.widget.AppCompatEditText
Android:id="@+id/myTextField"
Android:layout_height="wrap_content"
Android:layout_width="0dp"
Android:layout_weight="1"/>
Si je modifie la largeur des champs de texte sur wrap_content
Cela fonctionne parfaitement pour tous les champs de texte , mais cela ne correspond pas à mon design. J'ai besoin du champ de texte pour remplir l'espace disponible.
J'ai même essayé de régler manuellement la largeur à une valeur DP aléatoire et elle n'a toujours pas fonctionné.
J'ai testé sur <API 30 appareils et c'est totalement fin.
J'ai également signé ce problème dans la production.
Ai-je manqué quelque chose? Pourquoi cela ne fonctionne-t-il pas sur API 30+?
Y a-t-il une autre façon d'obtenir le champ EditText pour remplir l'espace?
Mise à jour (toujours non résolue):
J'ai mis à jour mon Android Studio à la dernière version Arctic Fox 2020.3.1.
. J'ai aussi mis à jour la nivelle à 7.0.3
, et kotlin à 1.5.31
et toutes mes bibliothèques à la dernière version. J'utilise androidx.core:core-ktx:1.7.0
et androidx.constraintlayout:constraintlayout:2.1.2
.
J'ai enquêté plus loin et j'ai trouvé une plus grande étrangeté. Réglage du texte ou de tout indice de manière programmatique, provoque le bogue. Réglage du texte ou de l'indice dans XML, totalement fine et sans bug. Les valeurs de texte provenaient de la base de données, alors j'ai besoin de pouvoir les définir par programme.
// setting hint or text programmatically in .kt file causes the bug
// any one of the lines below will cause the bug
myTextField.setHint("myTextField hint")
myTextField.hint = "myTextField hint"
myTextField.setText("myTextField text")
myTextField.text = "myTextField text"
// setting hint or text in .xml file does not cause the bug
<androidx.appcompat.widget.AppCompatEditText
Android:id="@+id/myTextField"
...
Android:hint="myTextField hint"
Android:text="myTextField text"
... />
J'ai essayé de reproduire votre problème. Cela fonctionne bien avec TargetsDK 30 avec des mises à jour de vos contraintes. Veuillez trouver des screenshots ci-dessous. Ce sont les changements que j'ai faits.
J'ai mis à jour la manière dont vous définissez vos contraintes basées sur votre code que vous avez envoyé dans votre question. Trouvez le code mis à jour ci-dessous. Vous pouvez également consulter les captures d'écran ci-dessous pour voir que cela fonctionne.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="match_parent"
tools:context=".Activities.MainActivity">
<!-- THIS IS THE CONSTRAINT LAYOUT-->
<androidx.constraintlayout.widget.ConstraintLayout
Android:id="@+id/the_constraintlayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/the_lineartlayout">
<androidx.appcompat.widget.AppCompatEditText
Android:id="@+id/myTextField"
Android:layout_height="wrap_content"
Android:layout_width="0dp"
Android:text="ConstraintLayout Sample Text"
Android:gravity="center"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<!--
<androidx.appcompat.widget.AppCompatEditText
Android:id="@+id/myTextField"
Android:layout_height="wrap_content"
Android:layout_width="0dp"
Android:text="This is a sample text"
Android:gravity="center"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintLeft_toRightOf="parent"
app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
-->
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- THIS IS THE LINEAR LAYOUT-->
<androidx.appcompat.widget.LinearLayoutCompat
Android:id="@+id/the_lineartlayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/the_constraintlayout"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.AppCompatEditText
Android:id="@+id/myTextField2"
Android:layout_height="wrap_content"
Android:text="LinearLayoutCompat Sample Text"
Android:layout_width="0dp"
Android:layout_weight="1"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>