Android – EditText donne IndexOutOfBounds Exception lors de l'utilisation de TextAllCaps

J'essaie de créer une page d'inscription très simple en utilisant une mise en page relative. Cette page d'inscription est liée à un fragment appelé RegistrationFragment.

J'ai cinq champs EditText pour cette mise en page: nom, numéro de téléphone, courrier électronique, mot de passe et confirmation du mot de passe. Pour une raison quelconque, je peux entrer du texte dans le mot de passe et confirmer le mot de passe, mais chaque fois que j'essaie d'entrer un texte dans les autres champs, ils bloquent immédiatement l'application avec une exception IndexOutOfBounds.

  • Déviation d'appel Android par programme
  • Comment déterminer si les longues coordonnées sont sur une route avec Google Maps API v2
  • Blocage des applications Android par programme
  • Pouvons-nous utiliser une requête tronquée dans sqlite Android
  • Téléchargement Android Usb Transfer
  • Erreur lors de l'ajout d'apk pré-généré avec des bibliothèques partagées à AOSP
  • Voici la trace complète de la pile:

    java.lang.IndexOutOfBoundsException at android.graphics.Paint.getTextRunAdvances(Paint.java:1879) at android.text.TextLine.handleText(TextLine.java:747) at android.text.TextLine.handleRun(TextLine.java:898) at android.text.TextLine.measureRun(TextLine.java:414) at android.text.TextLine.measure(TextLine.java:293) at android.text.TextLine.metrics(TextLine.java:267) at android.text.Layout.getLineExtent(Layout.java:998) at android.text.Layout.drawText(Layout.java:329) at android.widget.Editor.drawHardwareAccelerated(Editor.java:1380) at android.widget.Editor.onDraw(Editor.java:1303) at android.widget.TextView.onDraw(TextView.java:5163) at android.view.View.draw(View.java:14465) at android.view.View.getDisplayList(View.java:13362) at android.view.View.getDisplayList(View.java:13404) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3077) at android.view.View.getDisplayList(View.java:13300) at android.view.View.getDisplayList(View.java:13404) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3077) at android.view.View.getDisplayList(View.java:13300) at android.view.View.getDisplayList(View.java:13404) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3077) at android.view.View.getDisplayList(View.java:13300) at android.view.View.getDisplayList(View.java:13404) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3077) at android.view.View.getDisplayList(View.java:13300) at android.view.View.getDisplayList(View.java:13404) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3077) at android.view.View.getDisplayList(View.java:13300) at android.view.View.getDisplayList(View.java:13404) at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1570) at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1449) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2377) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2249) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1879) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) 

    Mon fichier de mise en page xml:

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#e5e5e5"> <TextView android:id="@+id/fragment_registration_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/activity_vertical_margin" android:layout_marginTop="@dimen/activity_vertical_margin" android:layout_marginRight="@dimen/activity_horizontal_margin" android:layout_marginLeft="@dimen/activity_horizontal_margin" android:text="@string/registration_title" android:textAllCaps="true" android:textSize="35sp" android:layout_centerHorizontal="true" android:textColor="@color/blue" /> <RelativeLayout android:id="@+id/fragment_registration_edit_text_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_below="@id/fragment_registration_title" android:layout_centerHorizontal="true"> <EditText android:id="@+id/fragment_registration_legal_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:hint="@string/full_name_prompt" android:maxLines="1" android:textAllCaps="true" android:background="@drawable/edit_text_top_rounded" /> <EditText android:id="@+id/fragment_registration_cell_phone" android:layout_below="@id/fragment_registration_legal_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:hint="@string/cell_phone_prompt" android:maxLines="1" android:textAllCaps="true" android:background="@drawable/edit_text_white" /> <EditText android:id="@+id/fragment_registration_email" android:layout_below="@id/fragment_registration_cell_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:hint="@string/email_prompt" android:maxLines="1" android:textAllCaps="true" android:background="@drawable/edit_text_white" /> <EditText android:id="@+id/fragment_registration_password" android:layout_below="@id/fragment_registration_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:hint="@string/confirm_password_prompt" android:maxLines="1" android:background="@drawable/edit_text_bottom_rounded" /> </RelativeLayout> <Button android:id="@+id/fragment_registration_button" android:background="@drawable/button_registration" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/registration_button" android:textColor="#ffffff" android:layout_below="@+id/fragment_registration_edit_text_layout" android:layout_marginTop="5dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" /> </RelativeLayout> 

    Le cas échéant, je "regarde" mon code Fragment en utilisant ce qui suit, qui se trouve à la fin de la méthode onCreate () de mon activité principale à des fins de test. J'ai eu les mêmes erreurs lorsque j'ai essayé de tester l'inscription en tant qu'activité.

     RegistrationFragment test = new RegistrationFragment(); setContentView(R.layout.fragment_registration); 

  • Zoom pour s'adapter à tous les marqueurs sur la carte google maps v2
  • Swipe / Fling tab-change en conjonction avec ScrollView?
  • Comment récupérer un noeud spécifique à partir de la base de données FireBase dans Android
  • Android ViewPager obtenir la vue actuelle
  • ViewPagerIndicator - Définit TabPageIndicator au centre
  • Travailler avec ViewPager et Fragments
  • 3 Solutions collect form web for “Android – EditText donne IndexOutOfBounds Exception lors de l'utilisation de TextAllCaps”

    D'accord, je sais qu'il est en retard … mais cela peut aider d'autres personnes à l'avenir …

    J'ai eu le même problème avec textAllCaps pour EditText dans ma demande.

    J'ai trouvé que textAllCaps est une propriété uniquement pour TextView . Vous ne pouvez pas utiliser cette propriété pour EditText .

    Donc, je l'ai cherché et trouvé une meilleure solution pour cela.

    Plutôt que d'utiliser textAllCaps nous pouvons utiliser android:inputType="textCapCharacters" .

    Par exemple

      <EditText android:id="@+id/edittext1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textCapCharacters" android:hint="@string/first_name" android:padding="10dp" > </EditText> 

    Si nous utilisons android:inputType="textCapCharacters" il convertira tous les caractères en UPPER CASE, comme nous le voulons dans textAllCaps .

    PS Si vous utilisez la touche Maj et tapez le texte, il peut convertir le texte en minuscules. Vous pouvez toujours utiliser la méthode toUpper() dans l'objet string pour la convertir en majuscule. Cela peut aider …

    Ok, le problème est que textAllCaps ne fonctionne pas pour les contrôles EditText . Cela fonctionne uniquement pour les commandes qui ne sont pas modifiables (comme TextView ). Selon la documentation sur setAllCaps() (qui est le code derrière la version du textAllCaps ):

    Ce paramètre sera ignoré si ce champ est éditable ou sélectionnable

    Donc, ça ne fonctionnera pas.

    Maintenant, même si je ne sais pas pourquoi votre code s'est écrasé, il ne devrait pas l'être, il devrait juste être ignoré, mais peut-être, le problème se produit lorsque textAllCaps est défini à partir du fichier xml … Je n'étais pas sûr, mais je J'ai simplement suggéré ce que j'aurais changé le premier et j'espérais que ça fonctionnerait …

    De toute façon, je suis content d'avoir aidé …

    Je n'ai pas assez de réputation pour faire un commentaire, mais j'ai eu une exception d'exécution similaire (et crash) lors de l'utilisation d'un TextView et textAllCaps défini sur true .

    Lorsque j'ai supprimé ce paramètre, tout a fonctionné comme prévu. Il semble donc que les conseils donnés ci-dessus peuvent également s'appliquer à TextView dans certains cas.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.