android 通过资源字符串获得对应ID
### Android 通过资源字符串获得对应ID 的方法 在Android开发过程中,经常需要处理资源文件,例如从数据库中读取图片名称后动态加载对应的图片资源。本文将详细介绍如何通过资源字符串获取其对应的资源ID,并提供两种实用的方法来实现这一功能。 #### 一、问题背景与分析 在开发过程中,可能会遇到需要根据图片名称动态加载对应图片资源的需求。通常情况下,开发者会将图片资源放置在`res/drawable`目录下,并通过`R.drawable`的方式引用这些资源。然而,在某些特定场景下,这种方式可能不再适用,比如当图片名称是从数据库中动态读取的情况。此时,我们需要一种能够根据字符串形式的资源名获取其ID的方法。 #### 二、方法一:将图片资源放置于非默认目录 ##### 实现步骤: 1. **资源存放位置**:不将图片资源存放在`res/drawable`目录下,而是选择将其放在项目的`src`目录下的自定义包中,例如`com.drawable.resource`。 2. **资源调用方式**:通过`getClassLoader().getResourceAsStream()`方法获取资源流。 ##### 示例代码: ```java // 假设图片名称为 "imageName.png" String path = "com/drawable/resource/imageName.png"; InputStream is = getClass().getClassLoader().getResourceAsStream(path); Drawable drawable = Drawable.createFromStream(is, "src"); ``` ##### 注意事项: - 需要确保路径正确无误。 - `getDrawable` 方法的第二个参数用于指定解码器的名称,通常可以使用 `"src"` 或 `"imageName.png"`。 #### 三、方法二:继续使用 `res/drawable` 目录 对于希望继续使用`res/drawable`目录存储图片资源的场景,可以通过`getIdentifier`方法来实现资源ID的获取。 ##### 实现步骤: 1. **资源存放位置**:保持图片资源位于`res/drawable`目录下。 2. **资源ID获取**:使用`getResources().getIdentifier`方法来获取资源ID。 3. **资源加载**:使用`getDrawable`方法加载资源。 ##### 示例代码: ```java // 假设项目包名为 com.test.image int resID = getResources().getIdentifier("imageName", "drawable", "com.test.image"); Drawable image = getResources().getDrawable(resID); ``` ##### 注意事项: - 资源ID的获取需要正确的包名和资源类型(本例中为`drawable`)。 - 如果资源未找到,`getIdentifier`方法会返回0。 #### 四、结论 通过资源字符串获取其对应的资源ID有两种常见方法。第一种方法适用于希望将资源存放在非默认目录下的场景;第二种方法则适用于希望继续使用`res/drawable`目录的场景。开发者可以根据项目的实际需求选择合适的方法来实现动态加载资源的功能。无论采用哪种方法,都需要确保资源的路径或包名正确无误,以避免出现资源加载失败的问题。
- 老飞侠2014-04-25一般,说的不详细 .
- changingshow2013-06-17一般,说的不详细
- 粉丝: 7
- 资源: 356
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助