Android:资源 id 及资源 id 的动态获取
时间: 2024-03-13 08:45:31 浏览: 22
在 Android 开发中,资源 id 是一个整数值,用于标识应用程序中的资源,例如布局文件、字符串、图片等。每个资源在编译时都会被分配一个唯一的资源 id,这个 id 可以在代码中使用。
获取资源 id 的方式有两种:静态获取和动态获取。
1. 静态获取
在代码中使用 R 类来静态获取资源 id,例如:
```
int layoutId = R.layout.activity_main;
int stringId = R.string.app_name;
int imageId = R.drawable.ic_launcher;
```
2. 动态获取
动态获取资源 id 是指在运行时根据资源名称获取资源 id,通常用于需要根据用户输入或其它条件来加载不同资源的情况。以下是动态获取资源 id 的示例代码:
```
String resourceName = "ic_launcher";
int resourceId = getResources().getIdentifier(resourceName, "drawable", getPackageName());
```
其中,第一个参数是资源名称,第二个参数是资源类型(例如:drawable、string、layout 等),第三个参数是应用程序的包名。
需要注意的是,动态获取资源 id 的效率较低,建议在需要频繁获取资源时使用静态获取方式。
相关问题
Android 通过字符串资源名获取资源id
在 Android 中,我们可以通过字符串资源名获取资源id,具体步骤如下:
1. 定义一个字符串变量存储要获取的资源名:
```java
String resName = "my_string_resource";
```
2. 获取 Resources 对象:
```java
Resources res = getResources();
```
3. 获取应用包名:
```java
String packageName = getPackageName();
```
4. 使用 getIdentifier() 方法获取资源id:
```java
int resId = res.getIdentifier(resName, "string", packageName);
```
其中,第一个参数是资源名,第二个参数是资源类型(例如 "string" 表示字符串类型),第三个参数是应用程序包名。
5. 检查获取到的资源id是否为0,如果为0说明资源不存在,否则说明资源存在:
```java
if (resId != 0) {
// 资源存在,可以使用 res.getString(resId) 获取资源字符串值
} else {
// 资源不存在
}
```
android如何动态获取控件中背景图片的资源id?
您可以使用以下方法来动态获取控件中背景图片的资源ID:
1. 获取控件对象
```java
ImageView imageView = findViewById(R.id.my_image_view);
```
2. 获取背景图片的Drawable对象
```java
Drawable drawable = imageView.getBackground();
```
3. 从Drawable对象中获取资源ID
```java
int resourceId = ((BitmapDrawable) drawable).getBitmap().getGenerationId();
```
注意:这种方法只适用于背景图片是位图的情况,如果背景是其他类型的Drawable,需要根据具体情况进行转换。另外,如果控件没有设置背景图片,该方法返回的结果可能为0。