转载请注明出处:http://blog.csdn.net/crazy1235/article/details/70173560
在5.0以下手机,如果drawable xml文件中引用了attr ,则会出现类似下面的错误
04-14 14:43:06.413: W/System.err(13850): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jacksen.demo.view/com.jacksen.demo.view.selector.TestSelectorActivity}: android.view.InflateException: Binary XML file line #17: Error inflating class RadioButton 04-14 14:43:06.413: W/System.err(13850): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 04-14 14:43:06.413: W/System.err(13850): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2521) 04-14 14:43:06.413: W/System.err(13850): at android.app.ActivityThread.access$800(ActivityThread.java:172) 04-14 14:43:06.413: W/System.err(13850): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 04-14 14:43:06.413: W/System.err(13850): at android.os.Handler.dispatchMessage(Handler.java:110) 04-14 14:43:06.413: W/System.err(13850): at android.os.Looper.loop(Looper.java:193)但是在5.0及以上手机上并没有问题。
经过排除法确定是 ?attr 的问题。
在stackoverflow上有关于该问题的讨论
http://stackoverflow.com/questions/30756729/android-selector-drawable-doesnt-work-with-attributes
这是一个5.0之前的系统bug。
在Google Issue Tracker网站上也有开发者提交此问题:
https://issuetracker.google.com/issues/36941443
解决方案:
其实也简单,不是在xml中,定义drawable时,引用?attr有问题嘛!那就不用?attr,直接通过@drawable的形式引用资源。
然后需要做的就是对每个主题定义一个drawable.xml
http://stackoverflow.com/questions/8041537/how-to-reference-style-attributes-from-a-drawable