2015-02-21 10 views
35

Ich versuche, eine sehr einfache Registrierungsseite mit einem relativen Layout zu erstellen. Diese Registrierungsseite ist mit einem Fragment namens RegistrationFragment verknüpft.Android - EditText gibt IndexOutOfBounds Ausnahme bei der Verwendung von textAllCaps

Ich habe fünf EditText Felder für dieses Layout: Name, Telefonnummer, E-Mail, Passwort und Passwort bestätigen. Aus irgendeinem Grund kann ich Text in das Passwort eingeben und das Passwort bestätigen, aber jedes Mal, wenn ich versuche, einen Text in die anderen Felder einzugeben, stürzt er die Anwendung sofort mit einer IndexOutOfBounds-Exception ab.

Hier ist der volle Stack-Trace:

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) 

Meine xml Layout-Datei:

<?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> 

Wenn relevant, ich bin "auf der Suche" an meinem Fragmente Code der unten verwenden, die bei der ist Ende der onCreate() Methode meiner Hauptaktivität zu Testzwecken. Ich habe die gleichen Fehler, als ich versuchte, die Registrierung als Aktivität zu testen.

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

Post OnClickListener Code für EditText –

+0

Versuche 'textAllCaps' von den' ' Kontrollen zu entfernen und dann sehen, ob der Fehler immer noch auftritt ... – miselking

+0

@Morteza, ich irgendwo gelesen hatte, dass das ein Problem verursachen kann, aber ich habe eigentlich keinen onClickListener Code für meine EditTexte. –

Antwort

90

ich gleiches Problem mit textAllCaps für EditText hatte in meinem Anwendung.

Ich habe festgestellt, dass textAllCaps Eigenschaft nur für TextView ist. Sie können diese Eigenschaft nicht für EditText verwenden.

So habe ich R & D für sie und fand eine bessere Lösung für dieses Problem.

Statt textAllCaps können wir android:inputType="textCapCharacters" verwenden.

z.

<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> 

Wenn wir android:inputType="textCapCharacters" verwenden es alle Zeichen in Großbuchstaben umwandeln, wie wir in textAllCaps wollen.

P.S. Wenn Sie die Umschalttaste drücken und Text eingeben, kann Text in Kleinbuchstaben konvertiert werden. Sie können immer die Methode toUpper() in einem String-Objekt verwenden, um sie wieder in Großbuchstaben umzuwandeln. Es kann helfen ..

+0

Dies ist der richtige Weg, um mit diesem Problem umzugehen! – anirvan

+0

@Sufferer Froh, dass es geholfen hat :) –

+3

'android: inputType =" textCapCharacters "' verhindert nicht, dass Benutzer auf 'Shift' tippen und Kleinbuchstaben eingeben. –

5

Ok, das Problem ist, dass textAllCaps nicht für EditText Kontrollen funktionieren. Es funktioniert nur für Befehle, die nicht bearbeitet werden können (wie TextView). Gemäß Dokumentation über setAllCaps() (das den Code hinter Version der textAllCaps ist):

Diese Einstellung ignoriert werden, wenn dieses Feld bearbeitet oder wählbar ist

So wird es nicht funktionieren.

Jetzt bin ich nicht sicher, warum Ihr Code abgestürzt ist, sollte es nicht haben, sollte es einfach ignoriert werden, aber vielleicht tritt das Problem auf, wenn textAllCaps aus der XML-Datei gesetzt wird ... Ich war nicht sicher, aber ich schlug vor, genau das, was ich die ersten geändert hätte, und hoffte, dass es funktionieren würde ...

Wie auch immer, ich bin froh, dass ich geholfen ...

+0

Hm. Ich habe nicht genug Ruf, um sie zu verbessern. Aber du bist die Antwort. –

2

Ich habe nicht genug Ruf um einen Kommentar zu machen, aber ich hatte eine ähnliche Laufzeitausnahme (und Crash), während ein TextView und textAllCaps Satz true verwenden.

Als ich diese Einstellung entfernte, funktionierte alles wie erwartet. So scheint es, dass der obige Hinweis in bestimmten Fällen auch auf TextView Anwendung finden kann.

Verwandte Themen