Har*_*ish 12 string resources android menu monkeyrunner
有没有办法获取菜单项的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"
/>
Run Code Online (Sandbox Code Playgroud)
小智 13
解决方法1:
MenuItem item
String[] id = getResources().getResourceName(item.getItemId()).split("\\/");
Run Code Online (Sandbox Code Playgroud)
然后访问id [1]
溶液2:
使用titleCondensed匹配id,例如
<menu>
<item android:id="@+id/myid"
android:title="some menu title"
android:titleCondensed="myid"/>
...
</menu>
Run Code Online (Sandbox Code Playgroud)
然后
String selectedMenuIdString = (String) item.getTitleCondensed();
Run Code Online (Sandbox Code Playgroud)
我更喜欢解决方案1,因为我不必重复ID名称.
希望这可以帮助.关心史蒂夫
Jar*_*vis 10
试试这个:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_printer_settings:
//do what you want
break;
}
}
Run Code Online (Sandbox Code Playgroud)
Har*_*ish -1
通过获取包的所有字段解决了这个问题
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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20864 次 |
| 最近记录: |