2012-01-05 3 views
7

No puedo resolver este problema durante 3 días. Tengo recurso sencillo XML para el menúAnálisis del menú de Android recurso XML a la lista de objetos

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/categoryEditButton" 
      android:title="@string/edit" 
      android:icon="@drawable/edit" /> 
    <item android:id="@+id/categoryMoveUpButton" 
      android:title="@string/move_up" 
      android:icon="@drawable/up" /> 
    <item android:id="@+id/categoryMoveDownButton" 
      android:title="@string/move_down" 
      android:icon="@drawable/down" /> 
    <item android:id="@+id/categoryDeleteButton" 
      android:title="@string/delete" 
      android:icon="@drawable/trash" /> 
</menu> 

Quiero recibir Lista <Menultem> después del análisis de este XML:

public class MenuItem { 
    private CharSequence text; 
    private Drawable image; 
    private int actionTag; 

    //... getters and setters ... 
} 

necesito esto para manipulaciones no estándar con MenuItems y no puede trabajar con este recurso con métodos estándar como:

... 

MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.some_menu, menu); 

... 

¿Alguien me puede ayudar con esto? Gracias.

Respuesta

-1

Puede fácilmente change menu items at runtime.

Update después de comentario:

  1. Parse XML para obtener identificadores de recursos y tipos de recursos (imágenes, cuerdas, etc .. dibujables,)

  2. Access resources través Resources clase. Cada tipo de recurso tiene un método diferente para acceder a él.

+0

No, usted no me entiende. Quiero crear mi propio Menú y quiero escribir un método como este: public void setItemsFromResource (int menuResourceId) {...} para el menú de análisis del recurso de menú estándar XML. Escribí esta funcionalidad a través de mi propio formato XML, pero quiero analizar el formato del recurso del menú XML estándar :) Obtener objetos dibujables para iconos, obtener cadenas del recurso, etc. –

11

Esto ayudará a:

... 

PopupMenu p = new PopupMenu(this, null); 
Menu menu = p.getMenu(); 
getMenuInflater().inflate(R.menu.some_menu, menu); 

//Usage of menu 
System.out.println("LOG id: "+ menu.getItem(0).getItemId()); 
System.out.println("LOG title: "+ menu.getItem(0).getTitle()); 
System.out.println("LOG icon: "+ menu.getItem(0).getIcon()); 

... 

La creación de un PopupMenu es sólo un truco para crear un objeto de menú que cuando está inflado se llenará con la información definida en el código XML.

+0

Esta debería ser la respuesta correcta. Y funciona para API 7+ utilizando Support library v4 – Iree

1

Gracias Raul. No funciona para 2.33. He encontrado la solución Here.

private Menu newMenuInstance(Context context) { 
    try { 
     Class<?> menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder"); 
     Constructor<?> constructor = menuBuilderClass.getDeclaredConstructor(Context.class); 
     return (Menu) constructor.newInstance(context); 
    } catch (Exception e){ 
     MyLog.GetMyLog().e(e); 
    } 
    return null; 
} 
Cuestiones relacionadas