相対レイアウトを使用して非常に単純な登録ページを作成しようとしています。この登録ページは、RegistrationFragmentと呼ばれるフラグメントにリンクされています。
このレイアウトには、名前、電話番号、メール、パスワード、確認パスワードの5つのEditTextフィールドがあります。何らかの理由で、パスワードにテキストを入力してパスワードを確認できますが、他のフィールドにテキストを入力しようとすると、IndexOutOfBounds Exceptionでアプリケーションがすぐにクラッシュします。
完全なスタックトレースを次に示します。
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)
私の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>
関連する場合、以下を使用してフラグメントコードを「見て」います。これは、テスト目的でメインアクティビティのonCreate()メソッドの最後にあります。アクティビティとして登録をテストしようとしたときに、同じエラーが発生しました。
RegistrationFragment test = new RegistrationFragment();
setContentView(R.layout.fragment_registration);
アプリケーションのtextAllCaps
のEditText
にも同じ問題がありました。
textAllCaps
はTextView
のみのプロパティであることがわかりました。このプロパティをEditText
に使用することはできません。
そこで、私はそれのために研究開発を行い、この問題に対するより良い解決策を見つけました。
textAllCaps
を使用する代わりに、_Android:inputType="textCapCharacters"
_を使用できます。
例えば。
_ <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>
_
_Android:inputType="textCapCharacters"
_を使用すると、textAllCaps
で必要なように、すべての文字が大文字に変換されます。
P.S。Shiftキーを使用してテキストを入力すると、テキストが小文字に変換される場合があります。文字列オブジェクトで常に
toUpper()
メソッドを使用して、大文字に戻すことができます。役立つかもしれません。
このブログ投稿からこれらの詳細を読むことができます: https://androidacademic.blogspot.com/2018/05/indexoutofbounds-exception-while-using.html
問題は、textAllCaps
がEditText
コントロールに対して機能しないことです。編集できないコマンド(TextView
など)でのみ機能します。 setAllCaps()
(これはtextAllCaps
のコードビハインドバージョンです)のドキュメントによると:
このフィールドが編集可能または選択可能な場合、この設定は無視されます
そのため、機能しません。
今、私はあなたのコードがクラッシュした理由がわからない、それは持ってはいけない、それは単に無視されるべきであるが、多分、問題はtextAllCaps
がxmlファイルから設定されるときに起こる...私はそうではなかった確かですが、最初に変更したものを提案し、それが機能することを望みました...
とにかく、助けてくれてうれしいです...
コメントをするほどの評判はありませんが、TextView
とtextAllCaps
をtrue
に設定して使用しているときに、同様のランタイム例外(およびクラッシュ)が発生しました。
その設定を削除すると、すべてが期待どおりに機能しました。したがって、上記のアドバイスは特定の場合にTextView
にも適用できるようです。
true
の使用中にAndroid:digits
を設定し、textAllCaps
EditText
に設定した場合も同じことが起こります。解決策は同じです。textAllCaps
を削除してください。
私はtextAllCaps
にTextView
(EditText
ではなく)を使用していますが、それはcrash
昨日と同じコードですが、今日はcrash(昨日はクラッシュしません)(削除するとtextAllCaps
コードが正常に実行されます)
いくつかのケース修正しない私の問題
View
を削除し、レイアウト内でTextView
属性を持つtextAllCaps
属性を1つだけ保持します次に、いくつかの異なるコンピューターでコードを実行しようとしますit WORKING(私のAndroidStudioは別のコンピューターと同じです)
最後に、Android自分のコンピューター->ダウンロードAndroid Studio->インストール->プロジェクトの実行-> 幸いなことに働く
現在のASバージョンは3.1.14です。私はそれがあなたのケースで機能するかどうかはわかりませんが、それが役立つことを願っています