将Android菜单XML资源解析为对象列表

Dmy*_*nko 12 xml resources parsing android menu

我无法解决这个问题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>
Run Code Online (Sandbox Code Playgroud)

我希望在解析此XML后接收List <MenuItem>:

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

    //... getters and setters ...
}
Run Code Online (Sandbox Code Playgroud)

我需要使用MenuItems进行非标准操作,并且不能使用标准方法使用此Resourse:

...

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

...
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我吗?谢谢.

小智 23

这将有助于:

...

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

...
Run Code Online (Sandbox Code Playgroud)

创建一个PopupMenu只是一个创建一个Menu对象的技巧,当膨胀时将填充xml上定义的信息.


Pet*_*ego -1

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

评论后更新:

  1. 解析 XML以获取资源 ID 和资源类型(图像、字符串、可绘制对象等)

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