web-dev-qa-db-fra.com

Android Certains champs EditText ne répondent pas à la presse longue (API 30+ avec layout_Width 0DP)

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.

enter image description here

^ 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"
    ... />
4
Lifes

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.

  1. J'ai mis à jour les propriétés de contrainte que vous utilisiez car elles sont obsolètes. Par exemple. J'ai changé "Layout_constraintSleft_torightof" à "Layout_constraintStart_tostartof".
  2. La façon dont vous avez déclaré vos propriétés de contrainte met la vue hors de l'espace visible du parent. Par exemple. 'App: Layout_constraintSleft_torightof = "Parent"' met le LEFTSide de la vue à la fin du parent et qui fait la majeure partie de la vue invisible.

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>

enter image description hereenter image description hereenter image description here

1
Dankyi Anno Kwaku