记一诡异的Android开发过程中遇到的问题:换一个高版本的平板后,AutoCompleteTextView UI居然报错

如题, 在模拟器上跑都没问题,后来匹配到新来的那批android9平板上跑, 就出现:

android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class TextView
    Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class TextView
    Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 2 to dimension: type=0x1

第一时间怀疑是我的app哪里没兼容到android9,但是如果这么一个普通的autocompletetextview也不兼容也实在说不过去, 于是新建一个android9的tablet模拟器, 跑起来没问题! 于是又怀疑是不是实物的平板系统做得有问题, 不过很快就打消了这想法, 因为用

ui.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,
    new String[]{"ABCDEF","123456"})); 这种设置adapter一点也没问题!

ui.setAdapter(new ArrayAdapter<String>(this,android.R.layout.myspinner, new String[]{"ABCDEF","123456"})); 就出事了, 出事了, 事了, 了!

显而易见, 就是自定义的R.layout.myspinner里面有问题, 于是经过几次排查, 最终发现里面的@dimen/spinnerFontSize,只在指定size的dimen.xml里面有value,而在default的dimen.xml里面没有value!

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:gravity="left"
    android:paddingLeft="8dip"
    android:singleLine="true"
    android:textColor="@color/colorLabel"
    android:textSize="@dimen/spinnerFontSize"
    android:textStyle="bold" />

 

找到这个原因, 就好解释了, 根本不是因为android9的问题,也不是实物平板出现问题, 而是实物平板的尺寸与虚拟机的尺寸,以前平板的尺寸不一样, 导致app里面适配好的dimen.xml一个也用不上, 只能从默认的dimen.xml取值,而这个@dimen/spinnerFontSize在默认的dimen.xml里面又没定义才导致了这个错误 , 说到底还是自已的bug...

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值