Ham*_*mid 147 java resources android android-resources
我需要将资源ID传递给我的一个类中的方法.它需要使用引用所指向的id以及它还需要字符串.我该怎样才能做到最好?
例如:
R.drawable.icon
Run Code Online (Sandbox Code Playgroud)
我需要获取此的整数ID,但我还需要访问字符串"icon".
如果我必须传递给方法的是"icon"字符串,那将是更好的选择.
Mac*_*rse 157
@EboMike:我不知道那是不Resources.getIdentifier()存在的.
在我的项目中,我使用以下代码来做到这一点:
public static int getResId(String resName, Class<?> c) {
try {
Field idField = c.getDeclaredField(resName);
return idField.getInt(idField);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
它将用于获取R.drawable.icon资源整数值的值
int resID = getResId("icon", R.drawable.class); // or other resource class
Run Code Online (Sandbox Code Playgroud)
我刚发现一篇博文说,这Resources.getIdentifier()比使用反射一样慢.看看吧.
Azh*_*har 73
您可以使用此功能获取资源ID.
public static int getResourceId(String pVariableName, String pResourcename, String pPackageName)
{
try {
return getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,如果你想获得这样的可绘制调用函数
getResourceId("myIcon", "drawable", getPackageName());
Run Code Online (Sandbox Code Playgroud)
对于字符串,你可以像这样调用它
getResourceId("myAppName", "string", getPackageName());
Run Code Online (Sandbox Code Playgroud)
Dan*_*eón 37
这是基于@Macarse的答案.
使用此选项可以更快速,更友好地获取资源ID.
public static int getId(String resourceName, Class<?> c) {
try {
Field idField = c.getDeclaredField(resourceName);
return idField.getInt(idField);
} catch (Exception e) {
throw new RuntimeException("No resource ID found for: "
+ resourceName + " / " + c, e);
}
}
Run Code Online (Sandbox Code Playgroud)
例:
getId("icon", R.drawable.class);
Run Code Online (Sandbox Code Playgroud)
小智 29
如何从资源名称获取应用程序资源ID是一个非常常见且回答良好的问题.
如何从资源名称获取本机Android资源ID的答案不太好.这是我按资源名称获取Android可绘制资源的解决方案:
public static Drawable getAndroidDrawable(String pDrawableName){
int resourceId=Resources.getSystem().getIdentifier(pDrawableName, "drawable", "android");
if(resourceId==0){
return null;
} else {
return Resources.getSystem().getDrawable(resourceId);
}
}
Run Code Online (Sandbox Code Playgroud)
可以修改该方法以访问其他类型的资源.
Pet*_*ego 11
如果你需要配对一个字符串和一个int,那么Map如何?
static Map<String, Integer> icons = new HashMap<String, Integer>();
static {
icons.add("icon1", R.drawable.icon);
icons.add("icon2", R.drawable.othericon);
icons.add("someicon", R.drawable.whatever);
}
Run Code Online (Sandbox Code Playgroud)
既然你说你只想传递一个参数,而且似乎无关紧要,你可以传入资源标识符,然后找出它的字符串名称,因此:
String name = getResources().getResourceEntryName(id);
Run Code Online (Sandbox Code Playgroud)
这可能是获得这两个值的最有效方法。您不必从较长的字符串中只找到“图标”部分。
小智 6
从字符串中获取资源 ID 的简单方法。这里的resourceName是 drawable 文件夹中资源 ImageView 的名称,该文件夹也包含在 XML 文件中。
int resID = getResources().getIdentifier(resourceName, "id", getPackageName());
ImageView im = (ImageView) findViewById(resID);
Context context = im.getContext();
int id = context.getResources().getIdentifier(resourceName, "drawable",
context.getPackageName());
im.setImageResource(id);
Run Code Online (Sandbox Code Playgroud)
Kotlin 方法
inline fun <reified T: Class<*>> T.getId(resourceName: String): Int {
return try {
val idField = getDeclaredField (resourceName)
idField.getInt(idField)
} catch (e:Exception) {
e.printStackTrace()
-1
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
val resId = R.drawable::class.java.getId("icon")
Run Code Online (Sandbox Code Playgroud)
或者:
val resId = R.id::class.java.getId("viewId")
Run Code Online (Sandbox Code Playgroud)
我喜欢这个,它对我有用:
imageView.setImageResource(context.getResources().
getIdentifier("drawable/apple", null, context.getPackageName()));
Run Code Online (Sandbox Code Playgroud)
Simple method to get resource ID:
public int getDrawableName(Context ctx,String str){
return ctx.getResources().getIdentifier(str,"drawable",ctx.getPackageName());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152538 次 |
| 最近记录: |