parsingAndroid菜单XML资源到对象列表

我无法解决这个问题3天。 我有简单的XML资源菜单

<?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> 

我想在分析这个XML之后收到List <MenuItem>:

 public class MenuItem { private CharSequence text; private Drawable image; private int actionTag; //... getters and setters ... } 

我需要这个与MenuItems非标准的操作,并不能使用标准的方法,如:

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

有人可以帮我吗? 谢谢。

Solutions Collecting From Web of "parsingAndroid菜单XML资源到对象列表"

您可以在运行时轻松更改菜单项 。

更新后的评论:

  1. parsingXML以获取资源ID和资源types(图像,string,可绘制等)。

  2. 通过Resources类访问资源 。 每种资源types都有不同的访问方法。

这将有助于:

 ... 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()); ... 

创build一个PopupMenu它只是一个窍门,创build一个Menu对象,充气时将填充您的XML定义的信息。

谢谢劳尔。 它不适用于2.33。 我在这里find解决scheme。

 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; }