当前位置: 代码迷 >> 综合 >> 记一诡异的Android开发过程中遇到的问题:换一个高版本的平板后,AutoCompleteTextView UI居然报错
  详细解决方案

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

热度:31   发布时间:2023-12-15 19:31:03.0

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

android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class TextViewCaused by: android.view.InflateException: Binary XML file line #2: Error inflating class TextViewCaused 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...

 

  相关解决方案