使用TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse时出错

时间:2014-11-05 13:51:52

标签: android android-support-library

尝试使用最新的v7 appcompat支持库(r21,Lollipop)在API 10上设置ActionBar标题的样式时遇到此错误。在API 15+上工作正常。

我的相同代码曾经工作正常,直到r21出现,导致很多问题。

堆栈跟踪:

11-05 02:08:49.628: E/AndroidRuntime(527): Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.content.res.TypedArray.getColor(TypedArray.java:326)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.widget.TextView.setTextAppearance(TextView.java:1616)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.support.v7.widget.Toolbar.setTitle(Toolbar.java:579)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.support.v7.internal.widget.ToolbarWidgetWrapper.setTitleInt(ToolbarWidgetWrapper.java:285)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.support.v7.internal.widget.ToolbarWidgetWrapper.setWindowTitle(ToolbarWidgetWrapper.java:267)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.support.v7.internal.widget.ActionBarOverlayLayout.setWindowTitle(ActionBarOverlayLayout.java:679)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.support.v7.app.ActionBarActivityDelegateBase.onTitleChanged(ActionBarActivityDelegateBase.java:461)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.support.v7.app.ActionBarActivity.onTitleChanged(ActionBarActivity.java:176)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.app.Activity.onPostCreate(Activity.java:916)
11-05 02:08:49.628: E/AndroidRuntime(527):  at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1108)

我的应用res/styles.xml

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
        <item name="actionBarStyle">@style/AppBaseTheme.ActionBar</item>
    </style>
    <style name="AppBaseTheme.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid">
        <item name="titleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse</item>
    </style>

v7 appcompat res/styles_base_text.xml

53     <style name="Base.TextAppearance.AppCompat.Title">
 54         <item name="android:textSize">@dimen/abc_text_size_title_material</item>
 55         <item name="android:textColor">?android:textColorPrimary</item>
 56     </style>
 57
 58     <style name="Base.TextAppearance.AppCompat.Title.Inverse">
 59         <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
 60         <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
 61         <item name="android:textColorHighlight">?android:attr/textColorHighlightInverse</item>
 62         <item name="android:textColorLink">?android:attr/textColorLinkInverse</item>
 63     </style>

但是,一旦我删除了styles.xml中的“.Inverse”,就可以了。

它在此行崩溃http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3_r1/android/widget/TextView.java/#1616 在尝试获取colorHightlight时。

知道如何解决?

1 个答案:

答案 0 :(得分:2)

可能在API 10中没有 Base.TextAppearance.AppCompat.Title.Inverse 主题。
您应该检查API 10中是否存在主题。 解决方案可能是定义一个公共基本主题,该主题继承自API 10中包含的不同父主题。

<强> RES /值-V10 /的themes.xml:

<style name="Base.TextAppearance.AppCompat.Title">
    <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
    <item name="android:textColorHint">?android:attr/textColorHintInverse</item>
    <item name="android:textColorHighlight">16842905</item>
    <item name="android:textColorLink">?android:attr/textColorLinkInverse</item>
</style>

您绝对可以看到API级别10中不存在 textColorHighlightInverse
查看此textColorHighlightInverse链接,然后在左侧菜单中选择API级别10。

另请查看此https://code.google.com/p/android/issues/detail?id=18659