问题描述
我已将主题添加到我的应用程序中.为此,我使用了多种强调色来添加图像按钮.我有一个名为 fab selector xml 的 xml 文件,它为图像按钮提供形状和颜色.但是它在这个文件上给出了例外.
I have added themes to my application. For this I have used multiple accent colors to add on image button. I have a xml file named fab selector xml , which gives shape and color to image button. But its giving exceptions on this file.
第一个异常是类图像按钮的 inflateException.第二个是资源未找到 fab 选择器的异常.Fab 选择器位于 drawable 文件夹中.
1st exception is inflateException for class image button.2nd is resource not found Exception for fab selector. Fab selector resides in drawable folder.
它也显示 ,, 由:java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Its also showing ,, Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
如果我使用
?attr/colorAccent 如果我使用它就可以正常工作
?attr/colorAccent and it works fine if I use
<solid android:color="@color/colorAccent">
因为它给出了十六进制颜色值.
as it gives hex color value.
奇怪的事情,我把它应用到工具栏上,它也适用于棒棒糖.只有它在 fab 选择器文件上给出异常.
The strange thing same way I have applied this to toolbar and it works below lollipop as well. Only it's giving exception on fab selector file.
我不明白如何才能克服这个问题?
I don't understand how can I overcome this?
Fab 选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="?attr/colorAccent" />
</shape>
</item>
<item android:state_focused="true">
<shape android:shape="oval">
<solid android:color="?attr/colorAccent" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="?attr/colorAccent" />
</shape>
</item>
</selector>
日志:
2800/com.example.siddhi.timetablelayout E/AndroidRuntime:致命例外:主要02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:java.lang.RuntimeException:无法启动活动组件信息{com.example.siddhi.timetablelayout/com.example.siddhi.timetablelayout.MainActivity}:android.view.InflateException:二进制 XML 文件第 16 行:错误膨胀类 ImageButton02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.access$600(ActivityThread.java:130)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.os.Handler.dispatchMessage(Handler.java:99)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在 android.os.Looper.loop(Looper.java:137)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.main(ActivityThread.java:4745)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime: 在 java.lang.reflect.Method.invokeNative(Native方法)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在java.lang.reflect.Method.invoke(Method.java:511)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在 dalvik.system.NativeStart.main(本地方法)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:引起:android.view.InflateException:二进制XML 文件第 16 行:错误膨胀类 ImageButton02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.rInflate(LayoutInflater.java:746)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.parseInclude(LayoutInflater.java:830)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.rInflate(LayoutInflater.java:736)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.rInflate(LayoutInflater.java:749)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.rInflate(LayoutInflater.java:749)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.inflate(LayoutInflater.java:489)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.inflate(LayoutInflater.java:396)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在com.example.siddhi.timetablelayout.MainFragment.onCreateView(MainFragment.java:33)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.Activity.performStart(Activity.java:5018)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.access$600(ActivityThread.java:130)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.os.Handler.dispatchMessage(Handler.java:99)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在 android.os.Looper.loop(Looper.java:137)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.main(ActivityThread.java:4745)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime: 在 java.lang.reflect.Method.invokeNative(Native方法)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在java.lang.reflect.Method.invoke(Method.java:511)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在 dalvik.system.NativeStart.main(Native方法)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:由:android.content.res.Resources$NotFoundException: 文件res/drawable/fab_selector.xml 来自可绘制资源 ID #0x7f02008102-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.content.res.Resources.loadDrawable(Resources.java:1918)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.content.res.TypedArray.getDrawable(TypedArray.java:601)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在 android.view.View.(View.java:3336)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.widget.ImageView.(ImageView.java:114)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.widget.ImageButton.(ImageButton.java:87)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v7.widget.AppCompatImageButton.(AppCompatImageButton.java:59)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v7.widget.AppCompatImageButton.(AppCompatImageButton.java:55)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:107)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:938)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:992)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:171)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:675)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.rInflate(LayoutInflater.java:746)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.parseInclude(LayoutInflater.java:830)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.rInflate(LayoutInflater.java:736)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.rInflate(LayoutInflater.java:749)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.rInflate(LayoutInflater.java:749)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.inflate(LayoutInflater.java:489)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.view.LayoutInflater.inflate(LayoutInflater.java:396)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在com.example.siddhi.timetablelayout.MainFragment.onCreateView(MainFragment.java:33)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.Activity.performStart(Activity.java:5018)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.access$600(ActivityThread.java:130)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.os.Handler.dispatchMessage(Handler.java:99)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在 android.os.Looper.loop(Looper.java:137)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.app.ActivityThread.main(ActivityThread.java:4745)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime: 在 java.lang.reflect.Method.invokeNative(Native方法)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在java.lang.reflect.Method.invoke(Method.java:511)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在 dalvik.system.NativeStart.main(Native方法)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:引起:java.lang.UnsupportedOperationException:无法转换为颜色:type=0x202-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.content.res.TypedArray.getColor(TypedArray.java:326)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.graphics.drawable.GradientDrawable.inflate(GradientDrawable.java:951)02-18 05:11:01.161 2800-2800/com.example.siddhi.timetablelayout E/AndroidRuntime:在android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881)
我在 style.xml 中提到了 colorAccent
I have mentioned colorAccent in style.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorSecondary">@color/white</item>
<item name="windowActionBarOverlay">false</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowBackground">@color/background_material_light</item>
</style>
怎么办?谢谢..
推荐答案
您尝试执行的操作仅适用于 Android 级别 >=21.
What you are trying to do only works for Android level >=21.
From what I read it was a bug...You can read some more on this problem here or here.
这篇关于为什么 ?attr/colorAccent 在棒棒糖版本下不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!