2016-06-04 34 views
6

Mam następujący układ działalność:Dwa actionbars podczas uruchamiania ActionMode

<?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> 

jest on stosowany, aby mieć zawaleniem pasek + szufladę nawigacji + animację tytuł tytuł sub (w widgecie nagłówka). Wszystko jest w porządku, dopóki nie spróbuję uruchomić trybu akcji, aby włączyć wielokrotną selekcję.

to zrobić poprzez wywołanie:

mActionMode = mCollapsingToolbarLayout.startActionMode(mActionModeCallback); 

Problemem jest to, że w końcu ma dwa actionbars (z dwoma strzałkami):

See the screenshot

ten czarny jest jedynym, że był spodziewając się, że tam będzie biały, zostanie dodany, gdy uruchomię ActionMode.

Czy robię coś nie tak?

EDIT

w AndroidMaifest

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

W 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> 

EDIT2

Jeśli chcesz przetestować ten problem, możesz utworzyć nowy projekt w studiu Android za pomocą przykładowego kodu ScrollingActivity. Modyfikacja motywu jak myślisz, a potem po prostu należy uruchomić tryb działania po naciśnięciu Fab, przekazując następujące obiekt jako ActionMode.Callback do startSupportActionMode:

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { 
    // Called when the action mode is created; startActionMode() was called 
    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
     // Inflate a menu resource providing context menu items 
     MenuInflater inflater = mode.getMenuInflater(); 
     inflater.inflate(R.menu.menu_scrolling, menu); 
     return true; 
    } 

    // Called each time the action mode is shown. Always called after onCreateActionMode, but 
    // may be called multiple times if the mode is invalidated. 
    @Override 
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
     return false; // Return false if nothing is done 
    } 

    // Called when the user selects a contextual menu item 
    @Override 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       mode.finish(); 
       return true; 
      default: 
       return false; 
     } 
    } 

    // Called when the user exits the action mode 
    @Override 
    public void onDestroyActionMode(ActionMode mode) { 
     mActionMode = null; 
    } 
}; 
+0

duplikat pytanie: http: // stackoverflow. com/questions/26483778/display-actionmode-over-toolbar –

Odpowiedz

5

Musisz poinformować system, że używasz zamiast tego niestandardowy pasek narzędzi. Aby to zrobić, w onCreate swojej działalności, wystarczy dodać następujące:

@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); 
} 

Oto moja aktywność rozciąga AppCompatActivity dlatego używam setSupportActionBar, ale można znaleźć tę samą metodę do regularnej aktywności setActionBar

Ponadto musisz utworzyć styl (pod rES/wartości/styles.xml):

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

lub w przypadku jeszcze nie zastąpią AppTheme:

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

i wreszcie ustawić ten temat w swoim manifeście do danej działalności:

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

EDIT: Po edytować swoje pytanie, wydaje się, że rzeczywiście jest problem actionMode tutaj.Jak wyjaśniono na this answer, upewnij się, że używasz prawidłowego importu, jak również za pomocą startSupportActionMode zamiast startActionMode

+1

Już to robię. Właśnie dlatego pasek narzędzi działa. Wygląda na to, że problem polega na tym, że uruchomienie trybu akcji wyzwala tworzenie (lub pokazywanie) innego paska akcji. – kingston

+0

Dobrze, początkowo go nie dostałem. Następnie zapoznaj się z moją zredagowaną odpowiedzią, w której również udostępniam motyw niestandardowy, aby pozbyć się domyślnego paska akcji, który musisz ustawić w znaczniku aktywności w manifeście – NSimon

+0

, niestety już to robię. Przepraszam, że dodam trochę więcej szczegółów w pytaniu – kingston

3

spróbuj dodać następujące w motywu w styles.xml -

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

dodać Również po linie, jeśli używasz Toolbar -

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

Mmm Nie pamiętam, czy sprawdziłem tę kombinację. Sprawdzę to teraz. Dzięki – kingston

+0

zrobi to tylko ostatnia linia. true. Użyj również supportActionMode –

+0

Nadal wyświetla pasek czynności nad paskiem narzędzi. – kingston

2

rodzica tematem ma być niektóre NoAction kreskowych tematów

<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> 
+0

Witam. To już jest tak, że – kingston

+0