Upgraded to AppCompat v22.1.0 and now getting IllegalArgumentException: AppCompat does not support the current theme features

AndroidAndroid AppcompatIllegalargumentexception

Android Problem Overview


I've just upgraded my app to use the newly released v22.1.0 AppCompat and I'm now getting the following exception when I open my app.

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

How do I fix it?

Android Solutions


Solution 1 - Android

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

The main reason behind this is to support AppCompatDialogs which we were also adding in this release. They make heavy use of the windowNoTitle flag, which AppCompat previously didn't pay much attention to.

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="MyTheme" parent="Theme.AppCompat">
    ...
</style>

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

You should be back on track now.

Solution 2 - Android

Those who're still getting error after all of those fix.

Please inherit from

Theme.AppCompat.Light.NoActionBar

and don't use

<item name="windowActionBar">false</item>

Then, you won't get any error.

Solution 3 - Android

I added

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

but it wasnt enough. Finally, moving super.onCreate before setContentView in Activity - fixed my issue :)

   public void onCreate(Bundle savedInstanceState) {    

        super.onCreate(savedInstanceState);    
        setContentView(R.layout.v2_main_dash);
        ...

Solution 4 - Android

Just use this in your style.xml in values-v21 folder no other editing is needed

 <style name="AppTheme" parent="Theme.AppCompat">

    <!-- theme customizations -->

   <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
 </style>

Don't add anything in to activity file please leave it

public class Main extends ActionBarActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChris BanesView Question on Stackoverflow
Solution 1 - AndroidChris BanesView Answer on Stackoverflow
Solution 2 - AndroidAdnanView Answer on Stackoverflow
Solution 3 - AndroidSergey VakulenkoView Answer on Stackoverflow
Solution 4 - AndroidRibin HaridasView Answer on Stackoverflow