Monday, June 13, 2016

Two actionbars when starting ActionMode

Leave a Comment

I have the following activity layout:

<?xml version="1.0" encoding="utf-8"?>  <android.support.v4.widget.DrawerLayout     android:id="@+id/drawerLayout"     style="@style/DrawerLayout"     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.support.design.widget.CoordinatorLayout         android:layout_width="match_parent"         android:layout_height="match_parent"         android:fitsSystemWindows="true"         tools:context=".ui.activity.MyActivity">          <android.support.design.widget.AppBarLayout             android:id="@+id/app_bar"             android:layout_width="match_parent"             android:layout_height="@dimen/app_bar_height"             android:background="@color/black"             android:fitsSystemWindows="true"             android:theme="@style/AppTheme.AppBarOverlay">              <android.support.design.widget.CollapsingToolbarLayout                 android:id="@+id/toolbar_layout"                 android:layout_width="match_parent"                 android:layout_height="match_parent"                 android:fitsSystemWindows="true"                 app:collapsedTitleTextAppearance="@style/ToolbarTitle"                 app:contentScrim="@color/primary"                 app:layout_scrollFlags="scroll|exitUntilCollapsed">                  <android.support.v7.widget.Toolbar                     android:id="@+id/toolbar_top"                     android:layout_width="match_parent"                     android:layout_height="?attr/actionBarSize"                     app:layout_collapseMode="pin"                     app:popupTheme="@style/AppTheme.PopupOverlay"                     app:theme="@style/ThemeOverlay.AppCompat.Light"/>              </android.support.design.widget.CollapsingToolbarLayout>         </android.support.design.widget.AppBarLayout>          <my.package.ui.widget.MyHeaderWidget             android:id="@+id/deal_header"             android:layout_width="match_parent"             android:layout_height="wrap_content"             app:layout_behavior="my.package.ui.activity.MyHeaderBehavior"/>          <include layout="@layout/content_list"/>     </android.support.design.widget.CoordinatorLayout>      <include layout="@layout/navigation_view"/>  </android.support.v4.widget.DrawerLayout> 

It is used to have a collapsing toolbar + the navigation drawer + an animation for a title an sub title (in the header widget). Everything is good until I try to start the ActionMode to enable multi-selection.

I do it by calling:

    mActionMode = mCollapsingToolbarLayout.startActionMode(mActionModeCallback); 

The problem is that I end having two actionbars (with two arrows):

See the screenshot

The black one is the one that I was expecting to be there the white one is added when I start the ActionMode.

Am I doing something wrong?

EDIT

in the AndroidMaifest

    <activity         android:name=".ui.activity.MyActivity"         android:label="@string/title_activity"         android:theme="@style/MyTheme">     </activity> 

In the styles.xml

<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">     <item name="android:windowBackground">@drawable/window_background_gray</item>     <item name="android:colorBackground">@color/app_background</item>     <item name="displayOptions">showHome|homeAsUp|showTitle</item>     <item name="android:icon">@android:color/transparent</item>     <item name="android:windowContentOverlay">@null</item>     <item name="colorPrimary">@color/primary</item>     <item name="colorAccent">@color/accent</item>     <item name="colorPrimaryDark">@color/primaryDark</item>     <item name="android:textAppearanceButton">@style/Theme.ButtonTextAppearance</item>     <item name="windowActionBar">false</item>     <item name="windowNoTitle">true</item> </style> 

4 Answers

Answers 1

You will need to tell the system that you use your custom toolbar instead. To do so, in the onCreate of your Activity, simply add the following :

@Override protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.your_layout);   //Then get a reference to your Toolbar   Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_top);   //Tell the system to use yours   setSupportActionBar(toolbar); } 

Here my Activity extends AppCompatActivity which is why I'm using setSupportActionBar, but you will find the same method for regular Activity setActionBar

In addition, you'll need to create a style (under res/values/styles.xml) :

<style name="MyNoAppBarTheme" parent="AppTheme">     <item name="windowActionBar">false</item>     <item name="windowNoTitle">true</item> </style> 

or in case you don't already override your AppTheme :

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

and finally set this theme in your manifest for that particular activity :

<activity         android:name=".ui.activities.YourActivity"         android:label="@string/app_name"         android:theme="@style/MyNoAppBarTheme"         /> 

EDIT : After you edited your question, it seems indeed that the actionMode is the issue here. As explained on this answer, make sure you're using the correct import, as well as using the startSupportActionMode instead of startActionMode

Answers 2

Try adding the following in your theme in styles.xml -

<item name="android:windowActionBarOverlay">false</item> <item name="windowActionBarOverlay">false</item> <item name="windowActionModeOverlay">true</item> 

Answers 3

Your parent theme has to be some of NoAction bar themes

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">         <!-- Customize your theme here. -->         <item name="colorPrimary">@color/colorPrimary</item>         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>         <item name="colorAccent">@color/colorAccent</item>          <item name="colorControlNormal">@color/colorPrimary</item>         <item name="colorControlActivated">@color/colorAccent</item>     </style> 

Answers 4

If you're using a Toolbar these 3 lines are enough:

 <style name="AppTheme.NoActionBar">     <item name="windowActionBar">false</item>     <item name="windowNoTitle">true</item>     <item name="windowActionModeOverlay">true</item> <!-- This is the important line --> </style> 

Remember to add that in both files styles and styles(v21)

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment