user1724763
user1724763

Reputation:

Error using TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse

Encountered this error trying to style the ActionBar title, on API 10, using the latest v7 appcompat support lib (r21, Lollipop). Works fine on API 15+ though.

my same code used to work fine until this r21 came along, causing many problems.

stack trace:

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)

My app's 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>

However, once I removed the ".Inverse" in my styles.xml, it works fine.

It crashes at this line http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3_r1/android/widget/TextView.java/#1616 while trying to get the colorHightlight.

Any idea how to fix?

Upvotes: 3

Views: 4844

Answers (1)

vovahost
vovahost

Reputation: 36049

It may be that in API 10 there is no Base.TextAppearance.AppCompat.Title.Inverse theme.
You should check if the theme is present in API 10. A solution may be to define a common base theme that inherits from a different parent theme included in API 10.

res/values-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>

You can definitely see that textColorHighlightInverse is not present in API level 10.
Check this textColorHighlightInverse link and select API level 10 in left menu.

Also have a look at this https://code.google.com/p/android/issues/detail?id=18659

Upvotes: 2

Related Questions