兼容安卓8.0和安卓4.0手机TetxView字体过长会出现java.lang.ArrayIndexOutOfBoundsException: length=29; index=-1!

话说 已经很久没写博客了,心思都放在其他地方上面去了,但是还是要记录一下工作中出现的bug记录

这次公司里的项目出现了一个很奇怪的bug,在6.0或者7.0甚至8.0都不会出现次bug,但是在5.0以下的手机,这里指的是4.0的手机,毕竟市面上4.0以下的手机已经很少了。

话不多少直接看AS报的错误。

java.lang.ArrayIndexOutOfBoundsException: length=29; index=-1

我来个去,看错误日志很明显是数组越界,但是我代码里明明没有数组.也没有用到LIst啊,所以我一步步分析,定位到了一个TextView设置String的时候出错了

我当时就想设置一个String 也能报错?

因为我们的公司的协议用了protbuff里面有个字符 ByteString

但是java中没有这个字符,所以必须要转String。

我原以为是ByteString转String出错了,但是我一看打印日志,打印的String是正常字符串。

这就有点奇怪了。。。。

后面我看我其他代码TextView设置String也是用ByteString转String 没有任何问题,所以我就想一下是不是布局出了问题

后面一试,果然如此


                <TextView
                    android:singleLine="true"
                    android:id="@+id/txt_sensor_name"
                    android:layout_width="158dp"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="5dp"
                    android:layout_toRightOf="@id/img_sensor_type"
                    android:ellipsize="middle"
                    android:maxLines="1"
                    android:textColor="@color/font_dark_gray"
                    android:textSize="15sp"/>

我这里的代码设置了固定宽度,因为字体过长了,所以加了maxLInes=1还有ellipsize=middle

但是我没加singleLine=true它就报以上那个错误,加了就可以了

原理分析,singleLIne=true 已经废弃了 但是不知道是在什么版本废弃了,但是在4.0的手机上还是起作用的,如果你要兼容到4.0的手机 并且字体过长的话 一定要加上这个。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值