Ocultación de la tostada para la prensa larga en la acción
¿Es posible alguna forma de ocultar la tostada después de una larga pulsación en el elemento ActionBar? No he establecido un título para el artículo, pero todavía está allí – tostada vacía.
<item android:id="@+id/ab_main_menu_dots" android:icon="@drawable/action_icons_dots" android:showAsAction="always"> <menu> <item android:id="@+id/ab_main_menu_my_profile" android:showAsAction="never" android:title="@string/ab_my_profile"> </item> <item android:id="@+id/ab_main_menu_settings" android:showAsAction="never" android:title="@string/menu_settings"> </item> <item android:id="@+id/ab_main_menu_help" android:showAsAction="never" android:title="@string/tv_help_login"> </item> <item android:id="@+id/ab_main_menu_about_us" android:showAsAction="never" android:title="@string/ab_about_us"> </item> <item android:id="@+id/ab_main_menu_logout" android:showAsAction="never" android:title="@string/bt_logout_main"> </item> </menu> </item>
- Android: ¿Cómo cambiar el icono "Home" de ActionBar para que sea algo distinto del icono de la aplicación?
- Uso de ProgressDialog en ActionBar (Android)
- Cómo editar el menú de la barra de Acción de Fragmento
- ¿Cómo ocultar la barra de acción antes de que se cree la actividad, y luego mostrarla de nuevo?
- Cómo agregar relleno entre los elementos del menú en android?
- Android Espresso typeText en EditText en ActionBar
- Android alinea los elementos del menú a la izquierda en la barra de acción
- Centre SearchView en la barra de acciones
- KeyListener en SearchView en Honeycomb ActionBar no funciona
- Establecer el título de un SherlockActionBar
- Dos elementos del menú Spinner en el ancho de ActionBar
- ¿Cómo alinear los elementos en la barra de acción a la izquierda?
- Cambio del fondo dibujable del widget de búsqueda
La única manera de ocultar el brindis es cuando se establece el ActionBar
menú ActionBar
que se muestra con texto. android:showAsAction="withText"
. De lo contrario, el brindis añade clarificación de lo que cada elemento de acción representa, incluso si no hay conjunto de títulos para el elemento de menú.
Puede modificar onLongClick
en ActionMenuItemView Class para detener Toasting en un clic largo.
Pero tenga cuidado, sólo está trabajando en dispositivos con API menos de 11, porque la biblioteca de sherlockactionbar comprobar su nivel de API del dispositivo por Build.VERSION.SDK_INT
y si tiene un dispositivo más nuevo que acaba de usar barra de acción por defecto del sistema que no está modificando.
Probablemente la manera más limpia de ir sobre esto es asignar una vista de acción personalizada a su elemento de menú que imita la apariencia de una regular.
Desde que mencionaste que estás usando ActionBarSherlock, he aquí un ejemplo sencillo.
Imagine el siguiente menu.xml , que se infla en una Activity
.
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/ab_main_menu_dots" android:actionLayout="@layout/ab_main_menu_dots_layout" android:showAsAction="always"/> </menu>
Puede definir ab_main_menu_dots_layout.xml para imitar el botón de desbordamiento de la siguiente manera:
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android" style="@style/Widget.Sherlock.ActionButton.Overflow" android:layout_width="match_parent" android:layout_height="match_parent" />
El resultado es un elemento de menú que se parece a un botón de desbordamiento y no muestra un mensaje Toast
cuando lo presiona de forma prolongada, independientemente de si se usa el ActionBar nativo o de ABS. Depende de usted tomarlo de aquí. Usted quiere reconsiderar y acatar las directrices en su lugar.
Usted podría intentar crear su propio ActionBar
personalizado. Aquí hay un tutorial sobre cómo hacer eso: Barra de Acción personalizada
Echar un vistazo a esta pregunta, estoy bastante seguro de que desea lograr eso.
Puede lograr esto utilizando la vista de acciones personalizadas de la siguiente manera:
action_menu.xml <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:support="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/item1" support:showAsAction="always"> </item> </menu> custom_action_view.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="10dp" android:paddingRight="5dp" > <ImageButton android:id="@+id/customActionItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:background="@drawable/abc_item_background_holo_dark" android:src="@drawable/bulb_icon" /> </RelativeLayout>
Y el código del inflador del menú es como sigue:
public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.action_menu, menu); final MenuItem item1= menu.findItem(R.id.item1); MenuItemCompat.setActionView(item1, R.layout.custom_action_view); View vItem1= MenuItemCompat.getActionView(item1); final ImageButton customActionItem= (ImageButton) vItem1.findViewById(R.id.customActionItem); customActionItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // do something here } }); return super.onCreateOptionsMenu(menu); }
En onCreateOptionsMenu
programe una tarea para deshabilitar el clic largo en el elemento de menú deseado. Aquí está la muestra
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.my_menu, menu); new Handler().post(new Runnable() { @Override public void run() { final View v = getActivity().findViewById(R.id.your_menu_item); if (v != null) { v.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return false; } }); } } }); }
Así es como lo hice:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem item = menu.findItem(R.id.no_toast); item.setActionView(R.layout.custom_view); item.getActionView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //handle click (just this item) } }); return true; }
Y este es mi menú:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:title="Never gonna see me in a toast!" app:showAsAction="always" android:id="@+id/no_toast" /> </menu>
Mi vista personalizada es sólo un ImageButton
:
<?xml version="1.0" encoding="utf-8"?> <ImageButton xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" style="@style/Widget.AppCompat.Toolbar.Button.Navigation" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/icon" />
Nota: no olvide establecer el estilo, Widget.AppCompat.Toolbar.Button.Navigation
hace que IamgeButton
se muestre correctamente en la barra de herramientas.
PS: Personalmente, prefiero el comportamiento por defecto, pero este fue mi caso: i deshabilitado de derecha a izquierda de apoyo para mi aplicación y después de que cuando establezca la configuración regional por defecto a un lenguaje rtl , tostadas estaba apareciendo en el lado equivocado! Honestamente estaba en prisa y no averiguar la razón, pero voy a apreciar si alguien me dejó saber el por qué, de todos modos esto es lo que pasó a través.
Para mí la solución estaba utilizando:
android.support.v4.view.MenuItemCompat
Así que en lugar de inflar el menú desde el XML:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.refresh_menu, menu); return true; }
He creado los elementos mediante programación utilizando MenuItemCompat:
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem refreshItem = menu.add(Menu.NONE, R.id.menu_item_refresh, Menu.NONE, R.string.general_pop_up_dialog_btn_cancel); MenuItemCompat.setActionView(refreshItem, R.layout.actionbar_custom_view_refresh); MenuItemCompat.setShowAsAction(refreshItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); return true; }
Hay una manera, si estás usando ActionBarSherlock. Encuentre el archivo ActionMenuItemView.java en la biblioteca y simplemente comente todo el método onLongClick.
- Glide: ¿Cómo encontrar si la imagen ya está en caché y utilizar la versión en caché?
- Compilar el proyecto de Android desde la línea de comandos es lento