android如何动态获取控件中背景图片的资源id?
时间: 2023-12-01 08:02:11 浏览: 80
您可以使用以下方法来动态获取控件中背景图片的资源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。
相关问题
android资源背景图,android换肤功能 如何动态获取控件中背景图片的资源id?
要动态获取控件中背景图片的资源ID,可以使用以下代码:
```java
View view = findViewById(R.id.view_id);
Drawable drawable = view.getBackground();
int resId = getResources().getIdentifier(getResources().getResourceEntryName(drawable.getConstantState().getExitValue()), "drawable", getPackageName());
```
这里的 `view_id` 是你想获取背景图片资源ID的控件的ID。然后,我们通过 `view.getBackground()` 方法获取该控件的背景图片。接着,我们通过 `getResources().getIdentifier()` 方法获取资源ID。
在这个例子中,我们使用 `getResources().getResourceEntryName()` 方法来获取资源的名称。然后,我们使用 `"drawable"` 作为资源类型来查找资源ID。最后,我们使用 `getPackageName()` 方法获取应用程序的包名。
这样,你就可以动态获取控件中背景图片的资源ID,然后根据需要进行操作,比如进行换肤功能的实现。
Gridlayout子控件里面的控件动态改变了shape颜色,然后设置背景,切换页面之后该控件背景显示不全
这个问题可能是因为在动态改变了子控件的shape颜色之后,没有及时更新Gridlayout子控件的布局参数导致的。你可以尝试在改变颜色后,调用Gridlayout子控件的`requestLayout()`方法,强制让其重新计算布局参数并更新显示。另外,也需要确保子控件使用的背景资源在页面切换时正确地加载和显示。如果问题仍然存在,可以提供更多的代码和具体的场景描述,以便更好地帮助你解决问题。
示例代码如下:
```java
// 获取子控件
View child = gridLayout.getChildAt(index);
// 动态改变shape颜色
GradientDrawable drawable = (GradientDrawable) child.getBackground();
drawable.setColor(getResources().getColor(R.color.colorAccent));
// 更新子控件的布局参数并更新显示
child.requestLayout();
```
其中,`index`是Gridlayout子控件的索引,`R.color.colorAccent`是你要设置的颜色资源ID。
注意,如果你使用的是XML布局文件设置背景的话,需要确保shape文件中使用了`solid`标签来设置背景颜色,例如:
```xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/colorAccent" />
<corners android:radius="8dp" />
</shape>
```
如果你还有其他问题或者需要更详细的帮助,请提供更多的信息和代码,让我更好地理解你的问题。