如何获取 Android 中菜单项的 Android ID?

新手上路,请多包涵

有没有办法获取菜单项的 Android ID?我可以看到 getTitle() 但看不到 getId()。我对 ID 值“menu_printer_settings”感兴趣,而不是标题值“printer_settings”和菜单项 ID (getItemId())。我需要此 ID 才能使我的 Monkey Talk 脚本也适用于本地化构建。

 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/menu_printer_settings"
    android:title="@string/printer_settings"
/>

原文由 AndroidDev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 514
2 个回答

通过获取包的所有字段来解决它

        Map<Integer, String> idMap = new HashMap<Integer, String>();
        Class<?> r;
        String rClass = activity.getBaseContext().getApplicationContext().getPackageName()
                + ".R$id";
        try {
            r = Class.forName(rClass);
        } catch (ClassNotFoundException e1) {
            Log.log("Unable to load " + rClass + ": " + e1.getMessage());
            return idMap;
        }
        for (Field f : r.getFields()) {
            int val;
            try {
                val = f.getInt(null);
            } catch (Exception e) {
                throw new IllegalStateException("Unable to get value for " + f.getName() + ": "
                        + e.getMessage());
            }
            idMap.put(val, f.getName());

        }

原文由 AndroidDev 发布,翻译遵循 CC BY-SA 3.0 许可协议

解决方案1:

 MenuItem item

String[] id = getResources().getResourceName(item.getItemId()).split("\\/");

然后访问 id[1]

解决方案2:

使用 titleCondensed 来匹配 id 例如

<menu>
            <item android:id="@+id/myid"
                  android:title="some menu title"
                  android:titleCondensed="myid"/>
...
</menu>

然后

String selectedMenuIdString = (String) item.getTitleCondensed();

我更喜欢解决方案 1,因为我不必重复 ID 名称。

希望这可以帮助。问候史蒂夫

原文由 SteJav 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题