0

I am getting following error after upgrading to AppCompat version 22 for android.

Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
        at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:363)
        at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)

Following is styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/blah.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/blah.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

    <style name="NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>

    <style name="topBarLeftIcon">
        <item name="android:paddingLeft">@dimen/top_bar_left_icon_left_padding_default</item>
        <item name="android:paddingRight">@dimen/top_bar_left_icon_right_padding_default</item>
        <item name="android:paddingTop">@dimen/top_bar_left_icon_top_padding_default</item>
        <item name="android:paddingBottom">@dimen/top_bar_left_icon_bottom_padding_default</item>
    </style>

    <style name="editTextStyle">
        <item name="android:padding">@dimen/edit_text_padding_default</item>
    </style>

    <style name="Divider1">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">1dp</item>
        <item name="android:background">@color/default_divider_color1</item>
    </style>

    <style name="Divider2">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">1dp</item>
        <item name="android:background">@color/default_divider_color2</item>
    </style>

    <style name="Divider3">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">1dp</item>
        <item name="android:background">@color/default_divider_color3</item>
    </style>

    <style name="VerticalDivider2">
        <item name="android:layout_width">1dp</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:background">@color/default_divider_color2</item>
    </style>


    <style name="CustomActionBar" parent="Theme.AppCompat.Light">
        <item name="android:actionBarStyle"  tools:ignore="NewApi">@style/HomeActionBar</item>
        <item name="android:actionMenuTextColor"  tools:ignore="NewApi">@color/actionBarTitleColor</item>
        <item name="android:homeAsUpIndicator"  tools:ignore="NewApi">@drawable/up_icon</item>

        <item name="actionBarStyle">@style/HomeActionBar</item>
        <item name="actionMenuTextColor">@color/actionBarTitleColor</item>
        <item name="homeAsUpIndicator">@drawable/up_icon</item>

        <item name="windowActionModeOverlay">true</item>
        <item name="colorPrimary">@color/bgBlue1</item>
        <item name="colorPrimaryDark">@color/bgBlue1</item>

    </style>

    <style name="HomeActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">

        <item name="android:background"  tools:ignore="NewApi">@drawable/action_bar_blue</item>
        <item name="background">@drawable/action_bar_blue</item>
        <item name="android:titleTextStyle"  tools:ignore="NewApi">@style/HomeActionBar.Text</item>
        <item name="titleTextStyle">@style/HomeActionBar.Text</item>

    </style>

    <style name="HomeActionBar.Text" parent="TextAppearance.AppCompat">
        <item name="android:textColor">@color/actionBarTitleColor</item>
        <item name="android:textSize">@dimen/action_bar_primary_action_font_size</item>
    </style>

    <style name="WhiteActionBar" parent="Theme.AppCompat.Light">
        <item name="android:actionBarStyle"  tools:ignore="NewApi">@style/WhiteActionBar.Style</item>
        <item name="android:actionMenuTextColor"  tools:ignore="NewApi">@color/signature_action_bar_title_color</item>
        <item name="android:homeAsUpIndicator"  tools:ignore="NewApi">@drawable/back_icon</item>

        <item name="actionBarStyle">@style/WhiteActionBar.Style</item>
        <item name="actionMenuTextColor">@color/signature_action_bar_title_color</item>
        <item name="homeAsUpIndicator">@drawable/back_icon</item>

        <item name="windowActionModeOverlay">true</item>

    </style>

    <style name="WhiteActionBar.Style" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background"  tools:ignore="NewApi">@color/white</item>
        <item name="background">@color/white</item>
        <item name="android:titleTextStyle"  tools:ignore="NewApi">@style/WhiteActionBar.Style.Text</item>
        <item name="titleTextStyle">@style/WhiteActionBar.Style.Text</item>
    </style>

    <style name="WhiteActionBar.Style.Text" parent="TextAppearance.AppCompat">
        <item name="android:textColor">@color/signature_clear_button_text_color</item>
        <item name="android:textSize">@dimen/action_bar_primary_action_font_size</item>
    </style>

    <style name="BoldDivider">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">1dp</item>
        <item name="android:background">@color/default_heading_color</item>
    </style>

    <style name="BoldDividerInline">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">1dp</item>
        <item name="android:background">@color/default_heading_color</item>
    </style>

    <style name="SemiBoldDivider">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">1dp</item>
        <item name="android:background">@color/semibold_divider_color</item>
    </style>

</resources>

I have also tried the solution suggested here but it doesn't seem to work.

Any help is greatly appreciated!

Here is Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.arion.arionbookeeper"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="19" />

    <uses-permission
        android:name="android.permission.INTERNET"
        android:required="true" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE"
        android:required="true" />
    <uses-permission
        android:name="android.permission.RECORD_AUDIO"
        android:required="true" />
    <uses-permission
        android:name="ANDROID.PERMISSION.READ_EXTERNAL_STORAGE"
        android:required="true" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:required="true" />
    <uses-permission
        android:name="android.permission.MODIFY_AUDIO_SETTINGS"
        android:required="true" />
    <uses-permission android:name="android.permission.VIBRATE" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:name=".WallPApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/CustomActionBar"
        tools:replace="android:theme" >
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <service
            android:name=".eventListeners.BackgroundEventListenerService"
            android:exported="false"
            android:icon="@drawable/ic_launcher" />

        <activity
            android:name=".GettingStarted"
            android:label="@string/app_name"
            android:noHistory="true"
            android:screenOrientation="portrait"
            android:theme="@style/NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<!-- Rest of activites -->
    </application>

</manifest>
Community
  • 1
  • 1
gauravdott
  • 420
  • 1
  • 5
  • 14

1 Answers1

0

AppCompat is now more strict on what it expect in theme window flags, more closely matching what you would get from the framework.

So to fix your issue you have two options:

The easy way is to just use Theme.AppCompat.NoActionBar as your parent theme. This will always do the right thing.

If you can't do that though (maybe you need to support action bar and no action bar), you should do the following:

<style name="CustomActionBar" parent=" Theme.AppCompat.NoActionBar">
        <item name="android:actionBarStyle"  tools:ignore="NewApi">@style/HomeActionBar</item>
        <item name="android:actionMenuTextColor"  tools:ignore="NewApi">@color/actionBarTitleColor</item>
        <item name="android:homeAsUpIndicator"  tools:ignore="NewApi">@drawable/up_icon</item>

        <item name="actionBarStyle">@style/HomeActionBar</item>
        <item name="actionMenuTextColor">@color/actionBarTitleColor</item>
        <item name="homeAsUpIndicator">@drawable/up_icon</item>

        <item name="windowActionModeOverlay">true</item>
        <item name="colorPrimary">@color/bgBlue1</item>
        <item name="colorPrimaryDark">@color/bgBlue1</item>

        <!-- Both of these are needed -->
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

I have add these two attributes under your CustomActionBar

<!-- Both of these are needed -->
            <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>

...

Let update using this and test it.

Bhavdip Sagar
  • 1,951
  • 15
  • 27