Android的 - 给人的EditText异常IndexOutOfBounds同时使用textAllCaps [英] Android - EditText gives IndexOutOfBounds Exception while using textAllCaps

查看:1363
本文介绍了Android的 - 给人的EditText异常IndexOutOfBounds同时使用textAllCaps的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建一个使用相对布局一个非常简单的注册页面。此注册页面被链接到一个称为RegistrationFragment片段

我对这个布局5的EditText字段:姓名,电话号码,电子邮件,密码和确认密码。出于某种原因,我可以输入文本的密码和确认密码,但每当我试着输入任何文字到其他领域,他们立即崩溃与IndexOutOfBounds异常的应用程序。

下面是完整的堆栈跟踪:

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

我的XML布局文件:

 <?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:背景=#e5e5e5><的TextView
    机器人:ID =@ + ID / fragment_registration_title
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_marginBottom =@扪/ activity_vertical_margin
    机器人:layout_marginTop =@扪/ activity_vertical_margin
    机器人:layout_marginRight =@扪/ activity_horizo​​ntal_margin
    机器人:layout_marginLeft =@扪/ activity_horizo​​ntal_margin
    机器人:文字=@字符串/ registration_title
    机器人:textAllCaps =真
    机器人:TEXTSIZE =35SP
    机器人:layout_centerHorizo​​ntal =真
    机器人:文字颜色=@色/蓝
    />< RelativeLayout的
    机器人:ID =@ + ID / fragment_registration_edit_text_layout
    机器人:layout_width =match_parent
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_marginLeft =30dp
    机器人:layout_marginRight =30dp
    机器人:layout_below =@ ID / fragment_registration_title
    机器人:layout_centerHorizo​​ntal =真正的>    <的EditText
        机器人:ID =@ + ID / fragment_registration_legal_name
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:重力=CENTER_HORIZONTAL
        机器人:提示=@字符串/ full_name_prompt
        机器人:MAXLINES =1
        机器人:textAllCaps =真
        机器人:背景=@绘制/ edit_text_top_rounded
        />    <的EditText
        机器人:ID =@ + ID / fragment_registration_cell_phone
        机器人:layout_below =@ ID / fragment_registration_legal_name
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:重力=CENTER_HORIZONTAL
        机器人:提示=@字符串/ cell_phone_prompt
        机器人:MAXLINES =1
        机器人:textAllCaps =真
        机器人:背景=@绘制/ edit_text_white
        />    <的EditText
        机器人:ID =@ + ID / fragment_registration_email
        机器人:layout_below =@ ID / fragment_registration_cell_phone
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:重力=CENTER_HORIZONTAL
        机器人:提示=@字符串/ email_prompt
        机器人:MAXLINES =1
        机器人:textAllCaps =真
        机器人:背景=@绘制/ edit_text_white
        />    <的EditText
        机器人:ID =@ + ID / fragment_registration_password
        机器人:layout_below =@ ID / fragment_registration_email
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:重力=CENTER_HORIZONTAL
        机器人:提示=@字符串/ confirm_password_prompt
        机器人:MAXLINES =1
        机器人:背景=@绘制/ edit_text_bottom_rounded
        />    < / RelativeLayout的><按钮
    机器人:ID =@ + ID / fragment_registration_button
    机器人:背景=@绘制/ button_registration
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:文字=@字符串/ registration_button
    机器人:文字颜色=#FFFFFF
    机器人:layout_below =@ + ID / fragment_registration_edit_text_layout
    机器人:layout_marginTop =5DP
    机器人:layout_marginLeft =30dp
    机器人:layout_marginRight =30dp
    机器人:layout_alignParentLeft =真
    机器人:layout_alignParentRight =真
    />
< / RelativeLayout的>

如果相关的,我在寻找我的片段code。使用下面的,这是我的主要活动中用于测试目的的onCreate()方法的末尾。我得到了同样的错误,当我试图测试注册为活动虽然。

  RegistrationFragment测试=新RegistrationFragment();
的setContentView(R.layout.fragment_registration);


解决方案

好吧,我知道它的晚..但它可以帮助其他人在未来..

我在我的应用程序曾与 textAllCaps 同样的问题,为的EditText


  

我发现 textAllCaps 仅供的TextView 属性。您不能使用该属性为的EditText


所以,我搜索了一下,发现更好的解决方案这一点。


  

而不是使用 textAllCaps 我们可以使用的android:inputType下=textCapCharacters


例如

 <的EditText
        机器人:ID =@ + ID / edittext1
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:EMS =10
        安卓的inputType =textCapCharacters
        机器人:提示=@字符串/ FIRST_NAME
        机器人:填充=10dp>
    < /&的EditText GT;

如果我们使用 的android:inputType下=textCapCharacters 将所有字符转换为大写字母,就像我们希望在 textAllCaps


  

P.S。如果您使用shift键和类型的文本可能以小写转换文本。您可以随时使用字符串对象 TOUPPER()方法将其转换回为大写。
  它可以帮助..


I'm trying to create a very simple registration page using a relative layout. This registration page is linked to a fragment called RegistrationFragment.

I have five EditText fields for this layout: name, phone number, email, password, and confirm password. For some reason, I can enter text into password and confirm password, but whenever I try to enter any text into the other fields, they immediately crash the application with an IndexOutOfBounds Exception.

Here's the full 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)

My xml layout file:

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

If relevant, I'm "looking" at my Fragment code using the below, which is at the end of the onCreate() method of my main activity for testing purposes. I got the same errors when I tried testing Registration as an activity though.

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

解决方案

Okay i know its late.. but it can help other people in future..

I had same problem with textAllCaps for EditText in my application.

I found that textAllCaps is property for TextView only. You can not use this property for EditText.

So, I searched for it and found better solution for this.

Rather than using textAllCaps we can use android:inputType="textCapCharacters".

E.g.

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

If we use android:inputType="textCapCharacters" it will convert all characters into UPPER CASE, like we want in textAllCaps.

P.S. If you use shift key and type text it may convert text in lowercase. You can always use toUpper() method in string object to convert it back to uppercase. It may help..

这篇关于Android的 - 给人的EditText异常IndexOutOfBounds同时使用textAllCaps的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆