ActionBarSherlock-Mostrar elementos de acción desbordados como icono + texto


Context

Estoy creando una barra de acción con algunos elementos de acción, usando ActionBarSherlock. Algunos de ellos están desbordados, por lo que se muestran en el submenú desbordamiento.

Mi problema

Esos elementos desbordados se muestran en el submenú como meros textos.

He intentado MenuItem.SHOW_AS_ACTION_IF_ROOM y MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT para setShowAsAction(), pero ambos tienen el mismo comportamiento:

Objetos desbordados sin icono

Lo que quiero

¿Es posible mostrar estos elementos en el desbordamiento submenú como <their_icon> + <their_text>? Algo como esto:

Objetos desbordados con icono

Author: Christian García, 2012-05-16

4 answers

Tampoco entiendo por qué los submenús pueden tener iconos y menús solo texto. Tal vez agregar elementos de menú como submenús al menú root podría ayudarlo. :)

Solo una mención, agregar iconos como este te obligará a usar la barra de acción (Sherlock) y no la forma estándar de mostrar los menús en la parte inferior al presionar la tecla menú en versiones anteriores de Android.

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/root_menu"
    android:icon="@drawable/ic_menu_moreoverflow_normal_holo_light"
    android:showAsAction="always"
    android:title="More">
    <menu>
        <item
            android:id="@+id/menu_settings"
            android:icon="@drawable/ic_menu_settings_holo_light"
            android:showAsAction="never"
            android:title="Settings" />
        <item
            android:id="@+id/menu_about"
            android:icon="@drawable/ic_menu_info_details"
            android:showAsAction="never"
            android:title="About"/>
   </menu>
</item>
</menu>
 15
Author: Arise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-23 19:01:25

1, cambie el valor a true de "mOptionalIconsVisible" en com.actionbarsherlock.interno.vista.menu.Constructor de menús.Java. Entonces usted verá los iconos siempre. Solo funciona para ActionBarSherlockCompact.Java.

2, Cambie el código fuente para agregar una api para MenuBuilder.java y MenuWrapper.java para establecer el icono.

 6
Author: rohn.chan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-08 19:44:12

Tengo un trabajo alrededor para tal escenario. Si está seguro de lo que desea poner en el menú de desbordamiento, entonces puede ponerlos en un submenú, y puede poner el icono y el título para ese elemento de submenú junto con los submenús anulando el método onCreateOptionsMenu.

Esto es lo que he hecho para lograr esta funcionalidad:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0, 1, 1, "MENU ONE TITLE")
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    SubMenu subMenu = menu.addSubMenu(0, 0, 2, "MENU TWO TITLE");

    subMenu.add(0, 2, 2, "SUB MENU ONE TITLE")
    .setIcon(R.drawable.sub_menu_one_icon);

    subMenu.add(0, 3, 3, "SUB MENU TWO TITLE")
    .setIcon(R.drawable.sub_menu_two_icon);

    MenuItem subMenuItem = subMenu.getItem();
    subMenuItem.setIcon(R.drawable.menu_two_icon);
    subMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    return super.onCreateOptionsMenu(menu);
}
 5
Author: Atul Kaushik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-20 22:08:26

En realidad , hay una manera de agregar un icono al texto incluso para los menús emergentes que se crean para el menú de desbordamiento. Por ejemplo:

final MenuItem menuItem=...
final ImageSpan imageSpan=new ImageSpan(this,R.drawable.ic_stat_app_icon);
final CharSequence title=" "+menuItem.getTitle();
final SpannableString spannableString=new SpannableString(title);
spannableString.setSpan(imageSpan,0,1,0);
menuItem.setTitle(spannableString);

Esto pondrá un icono al principio del elemento de menú, justo antes de su texto original.

 0
Author: android developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-24 13:07:24