我的应用程序依赖于一个库项目。
menu.xml 文件在应用程序项目中。
所有的 Java 代码都在库项目中,包括菜单处理程序代码 onOptionsItemSelected()。
有没有办法从库项目中访问应用程序资源?我想写类似这样的代码,但目前不可能,因为菜单项在库中不可见:
if ( item.getItemId()==R.id.settings ) {
...
}
我的应用程序依赖于一个库项目。
menu.xml 文件在应用程序项目中。
所有的 Java 代码都在库项目中,包括菜单处理程序代码 onOptionsItemSelected()。
有没有办法从库项目中访问应用程序资源?我想写类似这样的代码,但目前不可能,因为菜单项在库中不可见:
if ( item.getItemId()==R.id.settings ) {
...
}
如果你知道库的包名称,就可以使用资源管理器(Resource)中的 getIdentifier 方法实现。参考:Resources#getIdentifier
你可以这样做:
getResources().getIdentifier("res_name", "res_type", "com.library.package");
例如:
R.id.settings
将会是:
getResources().getIdentifier("settings", "id", "com.library.package");
menu.xml
资源的一个版本包含在您的库项目中。如果您想在应用程序中使用不同的 menu.xml
,则可以这样做,它会覆盖库项目中的副本。Resources.getIdentifier(String, String, String)
方法时,@triad的solution有一定的错误风险:
String
参数,容易使用不正确。String libString = context.getString(example.library.pkg.R.string.library_string)
这个库的包名是 example.library.pkg
。
R
类,因此您的 IDE 会告诉您是否正确引用了它。R
类仍然可以使用本地的 R
,并且显式标记外部资源使用使其更易于发现。
- Divya Gupta