android动态获取资源id
有时候提供的jar需要内嵌到第三方app,但是本身又使用到layout,drawable,string等资源,就需要用到动态获取资源id。比如原先我们设置页面是这样的setContentView(R.layout.main);现在需要改成这样:Utils.setPackageName(getPackageName());//20211026应陆金所要求,反射改成getResources...
·
有时候提供的jar需要内嵌到第三方app,但是本身又使用到layout,drawable,string等资源,就需要用到动态获取资源id。
比如原先我们设置页面是这样的
setContentView(R.layout.main);
现在需要改成这样:
Utils.setPackageName(getPackageName());
Utils.setContext(getApplicationContext());
setContentView(Utils.getResourceId(Utils.packageName, "layout",
"chinapay_main"));
public static Context mContext = null;
/**
* 设置上下文.
*
* @param name
* 包名
*/
public static void setContext(Context context) {
mContext=context;
}
/**
* 动态获取资源编号.
*
* @param packageName
* 包名
* @param typeName
* 资源类型
* @param instenceName
* 资源名
* @return int
*/
public static int getResourceId(String packageName, String typeName,
String instenceName) {
if (packageName != null && typeName != null && instenceName != null) {
try {
//反射这种方式大部分商户可以
// Class<?> cl = Class.forName(packageName + "$" + typeName);
// Field field = cl.getField(instenceName);
// return field.getInt(cl);
//20211026 某商户表示R做了内联,以上方法,无法找到资源,要求改用getResources方式
return mContext.getResources().getIdentifier(instenceName,typeName,packageName);
} catch (Exception e) {
e.printStackTrace();
}
}
return -1;
}
更多推荐
已为社区贡献7条内容
所有评论(0)