Android使用主题属性引发的问题
2014-05-07 13:26
148 查看
最近在做一个项目的Porting。直接改变了应用的Theme,最没有仔细的检查。结果应用在某些场景下直接就Crash了。还好,通过Log可以看到是在Inflate某个资源的时候出错导致的。通过定位资源的ID,找到对应的XML文件,发现可疑之处在于ImageView使用了一个主题属性“?xxxAttr”。
xxxAttr被定义为“reference”类型的属性,但在Theme中并没有为xxxAttr指向具体的资源。用C语言的角度来理解,xxxAttr就是指针,Theme中为xxxAttr指定的资源就是指针指向的具体内容。由于指针是确实存在的,所以编译的时候不会出错,但到运行时,由于指针为空,导致运行时出错。所以,在使用主题属性的时候一定要注意这类问题。
思考:如果在定义属性的时候,能够为属性设定一个默认的资源,就不会出现这样的问题了,为什么谷歌不考虑一下呢?
xxxAttr被定义为“reference”类型的属性,但在Theme中并没有为xxxAttr指向具体的资源。用C语言的角度来理解,xxxAttr就是指针,Theme中为xxxAttr指定的资源就是指针指向的具体内容。由于指针是确实存在的,所以编译的时候不会出错,但到运行时,由于指针为空,导致运行时出错。所以,在使用主题属性的时候一定要注意这类问题。
思考:如果在定义属性的时候,能够为属性设定一个默认的资源,就不会出现这样的问题了,为什么谷歌不考虑一下呢?
相关文章推荐
- Android使用ListView divider属性设置分界线,显示不出来的问题
- Android 使用ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- Android 多主题切换 (theme + style) 及 selector/drawable 无法引用 ?attr 属性的问题
- android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法
- 使用和获取Android的主题属性
- android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法
- a标签的href属性和onclick事件共同使用可能引发的问题
- Android平台上面输入法遮挡问题-android:windowSoftInputMode属性使用
- 使用ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- 使用ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法
- 使用ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- android 关于使用SharedPreferences来保存对象里既有属性又有集合的问题
- android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法
- 使用ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- android 属性系统使用的小问题
- android theme主题使用遇到的一个小问题
- Android 多主题切换 (theme + style) 及 selector/drawable 无法引用 ?attr 属性的问题
- 使用ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- Android 开发 Tip 2 -- 多主题下drawable.xml使用?attr的问题