java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library
Solution 1
Whats your logcat Throws
java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
- All of your themes (that want an Action Bar/Toolbar) must inherit from Theme.AppCompat. There are variants available, including Light and NoActionBar.
Please Read Official Document about AppCompat
What should you do
Please set
parent="Theme.AppCompat.NoActionBar"
instead of parent="Theme.AppCompat.Light"Avoid Duplicate Library Calling .
support:appcompat
called two times in yourbuild.gradle
section .
You can check similar types of question on SO
- Window.FEATURE_ACTION_BAR and set windowActionBar to false
- AppCompat does not support the current theme features
Solution 2
Why do you need to use Toolbar
? Do you need to support some old Android versions?
The point is that a Toolbar
is not actually ActionBar
. It lacks some functionality and forces you to use definite Themes on your Activities. So if you don't need to support some old versions of Android (v7.Toolbar is for SDK 7 (Android 2.1).
Oh, and by the way: what are you trying to do is called collapsing toolbar layout. Check this link for tutorial http://antonioleiva.com/collapsing-toolbar-layout/
P.S. Do not compile different versions of the same library! Don't do this:
compile 'com.android.support:appcompat-v7:23.0.1'
compile project(':viewPagerIndicator')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
Instead, change it to this:
compile 'com.android.support:appcompat-v7:23.0.1'
compile project(':viewPagerIndicator')
compile 'com.android.support:design:23.0.1'
Solution 3
OK! the famous Toolbar problem.
As from what it seems, try making few changes in the code you have posted.
1) If you want ActionBar in other activities but this one, create a new style for NoActionBar and add that style to this Activity
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Noe in you AndroidManifest.xml
, assign this theme so that only EventsDetailsActivity
will not have ActionBar but rest will.
<activity
android:name="EventsDetailsActivity"
android:theme="@style/AppTheme.NoActionBar">
2) The ScrollView
does not work well with the CoordinatorLayout
. So in order to achieve ‘Flexible Space with Image‘ try NestedScrollView
instead of ScrollView
. This will give you proper animation effect.
3) Change the ActionBar
with a Toolbar
in your EventsDetailsActivity
.
Hope it helps.
Comments
-
Flame of udun almost 2 years
I am trying to implement "Flexible Space with Image" from Material Design with the help of this tutorial:
Toolbar animation with android design support library
But I am getting this Rendering problem message in the layout preview :
The following classes could not be instantiated:
- android.support.design.widget.CoordinatorLayout (Open Class, Show Exception, Clear Cache) - android.support.design.widget.AppBarLayout (Open Class, Show Exception, Clear Cache)
I applied the
Theme.AppCompat
theme to my application but it screws up the action bar and appearance in every other activity. Also it throws an error on action bar methods such as :actionBar.setDisplayHomeAsUpEnabled(true);
stating the error(roughly) as :
setDisplayHomeAsUpEnabled(boolean) is being called on a null object reference
Additionally using
Theme.AppCompat
for the entire application gives the following error in the preview screen :The following classes could not be found: - android.support.v7.internal.app.WindowDecorActionBar (Fix Build Path, Create Class)
Thus I don't want to use
Theme.AppCompat
for the entire application. However, using aTheme.AppCompat
for the specific activity where I want to use the "Flexible space with image" design doesn't resolve theCoordinatorLayout
andAppBarLayout
issue stated earlier.Please tell me what to do! I have read many stackoverflow posts on the same issue but they didn't work for me! I have restarted android studio and invalidated my cache and restarted countless times as well!!
Here are the dependencies in my
build.gradle
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:support-v4:23.0.1' compile 'com.android.support:appcompat-v7:23.0.1' compile project(':viewPagerIndicator') compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' }
Running the app as is on my phone gives me this error:
java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
Setting the windowActionBar to false like so :
<item name="windowActionBar">false</item>
and then running the app throws this error :
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.seven.actionbar/com.seven.actionbar.EventsDetailActivity}: java.lang.IllegalArgumentException: AppCompat does not support the current theme features: { windowActionBar: false, windowActionBarOverlay: false, android:windowIsFloating: false, windowActionModeOverlay: false, windowNoTitle: false }
Here is the toolbar bit from the EventsDetailsActivity.java file :
Toolbar toolbar; CollapsingToolbarLayout collapsingToolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_eventsdetail); actionBarColor = new ColorDrawable(ContextCompat.getColor(getApplicationContext(), R.color.ufl_orange)); tDes = (TextView)findViewById(R.id.evt_desc); tVenue = (TextView)findViewById(R.id.evt_venue); tDate = (TextView)findViewById(R.id.evt_date); tTime = (TextView)findViewById(R.id.evt_time); tPdate = (TextView)findViewById(R.id.evt_post_date); tPtime = (TextView)findViewById(R.id.evt_post_time); tCont = (TextView)findViewById(R.id.evt_contact); tOrg = (TextView)findViewById(R.id.evt_org); tCount = (TextView)findViewById(R.id.evt_count); //Intent intent = getIntent(); //joinMap = (HashMap)intent.getSerializableExtra("e_uMap"); myApp = (MyApp)getApplication(); //action bar magic actionBarColor.setAlpha(0); toolbar = (Toolbar) findViewById(R.id.anim_toolbar); setSupportActionBar(toolbar); collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); ImageView header = (ImageView) findViewById(R.id.header); new LoadDetail().execute(); goingSwitch = (Switch) findViewById(R.id.btn_join); goingSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { new JoinEvents().execute(String.valueOf(isChecked)); } }); } @Override public void onStart(){ super.onStart(); // actionBar = this.getActionBar(); // actionBar.setDisplayShowHomeEnabled(false); }
Here is the layout code that goes with it:
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".EventsDetailActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="192dp" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginBottom="32dp" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/header" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/monalisa" android:fitsSystemWindows="true" android:scaleType="centerCrop" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:id="@+id/anim_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"/>' </android.support.design.widget.CoordinatorLayout>
The
ScrollView
and associated child elements(not shown here) is the main content of the page.Also modified the theme to:
<style name="EventsTheme" parent="Theme.AppCompat.Light"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
While the
IllegalStateException
andRuntimeException
are gone I can't see theCoordinatorLayout
again.false
-
IntelliJ Amiya over 8 years
-
IntelliJ Amiya over 8 years
-
Flame of udun over 8 yearsYea I've already mentioned your steps in the comments. And they're not working for me.
-
Shirish Herwade over 7 years"Why do you need to use Toolbar? Do you need to support some old Android versions?" Toolbar is Added in API level 21. So please reply, what do you think we should use instead of Toolbar ; if we don't have to support older versions that 21
-
Shirish Herwade over 7 yearsAt discussion on stackoverflow.com/questions/29813474/…, it is advised to use Toolbar instead of ActionBar
-
RexSplode over 7 yearsI gave the answer 1,5 years ago, and I reconsidered my position as AppBarLayout appeared. So I am using Toolbar myself these days. Though, a gut asked what to do if you don't want to set AppCompat theme for your activity.
-
Shirish Herwade over 7 yearsyes, Google changed it a lot...it's water under the bridge now