studio desplegable contextual android actionbarsherlock contextual-action-bar

desplegable - menu android studio



Barra de acción contextual de compatibilidad con Android (6)

ActionBarSherlock tiene su propia implementación de ActionMode, pero tendrás que controlar manualmente su ciclo de vida, escribí un tutorial sobre esto.

Al tratar de seguir las pautas de diseño de Android, me encuentro con un pequeño dilema.

Quiero tener una lista de elementos de los que puedo presionar varios (selección múltiple), y luego realizar acciones masivas en ellos.

Las pautas de diseño sugieren el uso de la barra de acción contextual para esto, y suena perfectamente como lo que tenía en mente. El problema es que estoy tratando de mantener la compatibilidad hacia atrás con API 7 (debido a que mi teléfono es 2.3.3 actualmente).

Estoy usando ActionBarSherlock para obtener otras cosas de la barra de acción, pero parece que no puedo encontrar la forma de hacer que se active una barra de acción contextual, ni he descubierto cómo agregar botones arbitrariamente a la ActionBar en ABS. Veo que puedes hacer pestañas, así que quizás esa sea la respuesta, pero como estoy tratando de permitir la selección múltiple, no quiero tener el menú contextual modal normal.


Configurar la barra de acción contextual es lo mismo que configurar los elementos "regulares" de la barra de acción en lo que respecta al XML. Este ejemplo en la guía del desarrollador lo explica todo .

Para utilizar ActionBarSherlock, reemplace las devoluciones de llamada predeterminadas de Android a las devoluciones de llamada editadas de ActionBarSherlock (por ejemplo, en lugar de Android.View.ActionMode , use com.actionbarsherlock.view.ActionMode ).


Contestaré la segunda parte de tu pregunta. Aquí hay un ejemplo de cómo agregar cualquier instancia de Vista (botón en el código siguiente) a la barra de acción con la biblioteca ActionBarSherlock:

@Override public boolean onCreateOptionsMenu(Menu menu) { refreshButton = (RotatingButton) LayoutInflater.from(this).inflate(R.layout.actionbar_customview_refresh, null); refreshButton.setOnClickListener(refreshButtonListener); MenuItem item = menu.add(0, android.R.id.copy, 0, getString(R.string.actionbar_refresh)); item.setActionView(refreshButton); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_action_bar, menu); }


Esta es una respuesta tardía, pero creo que ayudaría a las personas atrapadas.

Abrir la barra de acción contextual es bastante simple, en cualquier momento de su actividad, solo tiene que llamar:

startActionMode(mActionModeCallback);

Si no está en su actividad principal, como en fragmentos, puede obtener una referencia con

getSherlockActivity().startActionMode(mActionModeCallback);

y esta es la devolución de llamada

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){ @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.actionbar_context_menu, menu); return true; } @Override public void onDestroyActionMode(ActionMode mode) { } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.menu_item1: return true; case R.id.menu_item2: //close the action mode //mode.finish(); return true; default: mode.finish(); return false; } } };

El xml es un menú simple como el de la barra de acción:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_item1" android:icon="@drawable/ic_item1" android:title="@string/ITEM1" android:showAsAction="always|withText" /> <item android:id="@+id/menu_item2" android:icon="@drawable/ic_item2" android:title="@string/ITEM2" android:showAsAction="always|withText" />


Estaba enfrentando el mismo problema. Se solucionó cuando encontré este enlace . Básicamente, debe crear una clase de devolución de llamada que implemente ActionMode.Callback . En esta clase, infla la barra de acción con su barra de acción contextual. En cada selección (o clic largo), inicia la devolución de llamada utilizando el método startActionMode . Vea el enlace para un código de trabajo =]

EDITAR: También hay un ejemplo en las muestras de Sherlock en /samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.java


Para muestra de clic largo por favor, consulte los enlaces de abajo. El primero es el código Java requerido para la muestra. Y el segundo es cómo definir el diseño;