Dos barras de acción al iniciar ActionMode
Tengo el siguiente diseño de actividad:
<?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>
Se utiliza para tener una barra de herramientas que se derrumba + el cajón de la navegación + una animación para un título un subtítulo (en el widget del jefe). Todo está bien hasta que intente iniciar el ActionMode para habilitar la selección múltiple.
- Cómo fijar el título en la barra de herramientas dentro de CollapsingToolbarLayout
- Barra de herramientas de AppCompat v7 onOptionsItemSelected no llamado
- Android RecyclerView debajo de la barra de herramientas
- ¿Es posible agregar vista de imagen en una barra de herramientas?
- CollapsingToolbarLayout con una vista personalizada
Lo hago llamando a:
mActionMode = mCollapsingToolbarLayout.startActionMode(mActionModeCallback);
El problema es que termino teniendo dos barras de acción (con dos flechas):
[!] [Ver la captura de pantalla] [1] [1]
El negro es el que esperaba estar allí el blanco se agrega cuando comienzo el ActionMode.
¿Estoy haciendo algo mal?
EDITAR
En el AndroidMaifest
<activity android:name=".ui.activity.MyActivity" android:label="@string/title_activity" android:theme="@style/MyTheme"> </activity>
En el 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
Si desea probar este problema, puede crear un nuevo proyecto en Android Studio con el código de ejemplo ScrollingActivity. Modifique el tema como usted piensa que debe y luego acaba de iniciar el modo de acción al presionar el FAB, pasando el siguiente objeto como ActionMode.Callback a 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; } };
- Uso de la barra de herramientas en fragmento o en la actividad
- Problema con windowTranslucentNavigation
- Cómo habilitar / deshabilitar la barra de herramientas desplazamiento mediante programación cuando se utiliza biblioteca de soporte de diseño
- Elemento de menú de la barra de herramientas que no se puede hacer clic en android 4.4 (19)
- ¿Cómo se establece el color del título de la nueva barra de herramientas?
- ActionBar / Barra de herramientas no se muestra en la versión de Lollipop de la aplicación
- ¿El icono del logotipo de la barra de herramientas se puede hacer clic?
- Barra de herramientas y TabLayout no son visibles en dispositivos Android 4.4
Deberá indicarle al sistema que utilice su barra de herramientas personalizada. Para ello, en la onCreate de su actividad, simplemente añada lo siguiente:
@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); }
Aquí mi Actividad extiende AppCompatActivity
por lo que estoy usando setSupportActionBar
, pero encontrarás el mismo método para regular activity setActionBar
Además, necesitará crear un estilo (en res / values / styles.xml):
<style name="MyNoAppBarTheme" parent="AppTheme"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
O en caso de que ya no sobrescriba su AppTheme:
<style name="MyNoAppBarTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
Y finalmente establecer este tema en su manifiesto para esa actividad en particular:
<activity android:name=".ui.activities.YourActivity" android:label="@string/app_name" android:theme="@style/MyNoAppBarTheme" />
EDIT: Después de haber editado su pregunta, parece que el actionMode es el problema aquí. Como se explica en esta respuesta , asegúrese de que está utilizando la importación correcta, así como el uso de startSupportActionMode
lugar de startActionMode
Si estás usando una barra de herramientas, estas 3 líneas son suficientes:
<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>
Recuerde agregar que en ambos estilos y estilos de archivos (v21)
Intente agregar lo siguiente en su tema en styles.xml –
<item name="android:windowActionBarOverlay">false</item> <item name="windowActionBarOverlay">false</item> <item name="windowActionModeOverlay">true</item>
También agregue las líneas siguientes si está utilizando la Toolbar
–
<item name="windowActionBar">false</item> <item name="windowNoTitle">true</item>
Su tema padre tiene que ser algunos de los temas de barra NoAction
<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>