2013-06-05 68 views
10

有沒有辦法獲得菜單項的Android ID?我可以看到getTitle(),但不是getId()。我對ID值「menu_printer_settings」感興趣,而不是標題值「printer_settings」和菜單項ID(getItemId())。我需要這個ID來使我的Monkey Talk腳本也可以用於本地化構建。如何獲取Android中Android菜單項的Android ID?

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

+0

['menuItem.getItemId()'](http://developer.android.com/reference/android/view/MenuItem.html#getItemId())是否適合您? –

+0

@Adil,是的,它確實返回一個整數,我想要得到ID字符串「menu_printer_settings」 – Harish

回答

0

解決它通過獲取包的所有字段

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

     } 
7

試試這個:

public boolean onOptionsItemSelected(MenuItem item) { 

      switch (item.getItemId()) { 

      case R.id.menu_printer_settings: 
        //do what you want 
        break; 
       } 
} 
+0

我可以通過編程獲得ID字符串名稱「menu_printer_settings」嗎? – Harish

+0

很簡單:item.getTitle() – Jarvis

+0

標題和ID字符串是不同的。標題是「printer_settings」,但我對在XML文件中定義的ID字符串「menu_printer_settings」感興趣。 – Harish

11

解決方法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名稱。

希望這會有所幫助。 Registers Steve