Android中根据字符串动态获取资源文件ID

Android中getIdentifier方法的使用

在Android开发中,我们经常会遇到需要动态获取资源的情况,例如通过资源的名称获取资源的ID。这时,可以使用getIdentifier方法来实现这个功能。getIdentifier方法是Context类中的一个方法,可以根据资源的名称和类型来获取资源的ID。

使用方法

getIdentifier方法的定义如下:

int getIdentifier(String name, String defType, String defPackage);

name:资源的名称,即在res目录下的资源文件的名称,例如"my_image"。

defType:资源的类型,例如"drawable"、"layout"、"string"等。

defPackage:资源所在的包名,一般可以传入getPackageName()。

下面通过一个简单的示例来演示如何使用getIdentifier方法来获取资源的ID:

Context context = getApplicationContext();

String resourceName = "my_image";

String resourceType = "drawable";

String packageName = context.getPackageName();

int resourceId = context.getResources().getIdentifier(resourceName, resourceType, packageName);

// 使用resourceId来获取资源


示例

假设我们有一个res/drawable目录下有一个名为"my_image"的图片资源,我们可以通过以下代码来获取它的ID并将其显示在ImageView中:

Context context = getApplicationContext();

String resourceName = "my_image";

String resourceType = "drawable";

String packageName = context.getPackageName();

int resourceId = context.getResources().getIdentifier(resourceName, resourceType, packageName);

ImageView imageView = findViewById(R.id.imageView);

imageView.setImageResource(resourceId);


通过上面的代码,我们成功地将资源"my_image"显示在了ImageView中。

注意事项

在使用getIdentifier方法时,需要确保资源的名称、类型和包名是正确的,否则会返回0。

如果资源不存在,getIdentifier方法也会返回0,因此在使用前需要做好空指针判断。


封装工具类

public class ResourceUtil {

public static int getLayoutId(Context context, String resName) { 

        return context.getResources().getIdentifier(resName, "layout", 

                context.getPackageName()); 

    } 


    public static int getStringId(Context context, String resName) { 

        return context.getResources().getIdentifier(resName, "string", 

                context.getPackageName()); 

    }

    public static int getArrayId(Context context, String resName) {

        return context.getResources().getIdentifier(resName, "array",

                context.getPackageName());

    }

    public static int getDrawableId(Context context, String resName) { 

        return context.getResources().getIdentifier(resName, 

                "drawable", context.getPackageName()); 

    } 


    public static int getStyleId(Context context, String resName) { 

        return context.getResources().getIdentifier(resName, 

                "style", context.getPackageName()); 

    } 


    public static int getId(Context context, String resName) { 

        return context.getResources().getIdentifier(resName, 

                "id", context.getPackageName()); 

    } 


    public static int getColorId(Context context, String resName) { 

        return context.getResources().getIdentifier(resName, 

                "color", context.getPackageName()); 

    }

    public static int getAttrId(Context context, String resName) {

        return context.getResources().getIdentifier(resName,

                "attr", context.getPackageName());

    }

    public static int getStyleableId(Context context, String resName) {

        return context.getResources().getIdentifier(resName,

                "styleable", context.getPackageName());

    }

    public static int getMipmapId(Context context, String resName) {

        return context.getResources().getIdentifier(resName,

                "mipmap", context.getPackageName());

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容