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> 

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.

  • Los modos de navegación de la barra de acción están obsoletos en Android L
  • Restaurar el diseño predeterminado de la barra de acciones
  • Vista de búsqueda de la barra de acciones (Android) null error
  • Eliminar las pestañas de la barra de acciones en Android
  • Inhabilitar Menubutton en el emulador de Android
  • Personalización de las pestañas de ActionBar en Android 4
  • Cómo ocultar ActionBar y NavigationBar después de un cierto tiempo de retardo?
  • Android - Fragmento de la biblioteca de soporte no compatible con la plataforma 4.3
  • Cómo ir al icono de Centro en la barra de acción de Android
  • Cómo eliminar la flecha HomeAsUpButton de ActionBar Sherlock?
  • Animación suave cuando los cambios de pestaña
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.