Answers:
用这样的东西:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
用来获取ImageButton的ID(就像使用R.id.name一样)。
name
?我想找到一个按钮的ID,在我的情况下,该按钮的引用是我知道的button1
getResource()
并getPackageName()
显示错误。cannot resolve method
getResource()
并且getPackageName()
是从活性的方法。
您也可以尝试以下操作:
try {
Class res = R.drawable.class;
Field field = res.getField("drawableName");
int drawableId = field.getInt(null);
}
catch (Exception e) {
Log.e("MyTag", "Failure to get drawable id.", e);
}
我已经从下面的URL复制了此源代码。根据此页面上进行的测试,它比getIdentifier()快5倍。我还发现它更方便易用。希望它也对您有帮助。
链接: 在Android中动态检索资源
公共系统资源的示例:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
另一种方法是参考android.R.drawable类的文档。
您可以使用此功能获取资源ID:
public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
try {
return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
throw new RuntimeException("Error getting Resource ID.", e)
}
}
因此,如果您想获取Drawable Resource ID,可以调用以下方法:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(或来自片段):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
对于字符串资源ID,可以这样称呼它:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
等等...
注意:如果找不到资源ID,它将引发RuntimeException。确保在生产中正确恢复。
static
,否则getResources()
将无法正常工作。
Context
不可用。解决方法是将其删除static
并将其移动到Context
(例如Activity
或Application
)中;或替代修正是乔纳森(Jonathan)在其编辑中所做的,即将a传递Context
给该方法。