gpt4 book ai didi

android - 访问在主题和 attrs.xml android 中定义的资源

转载 作者:IT老高 更新时间:2023-10-28 21:42:29 28 4
gpt4 key购买 nike

我有一个场景,我想根据定义的主题设置 Drawable

为了进一步解释这一点,这是我在代码中的内容:

\res\values\attrs.xml

<resources>
<declare-styleable name="AppTheme">
<attr name="homeIcon" format="reference" />
</declare-styleable>
</resources>

res\values\styles.xml

<resources>
<style name="AppTheme" parent="android:style/Theme">
<item name="attr/homeIcon">@drawable/ic_home</item>
</style>
</resources>

AndroidManifest.xml

    <application android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

正如您所注意到的,我正在定义一个自定义 attr homeIcon 并在 AppTheme 中设置属性值。

当我在布局 XML 中定义此属性并尝试访问它时,它工作顺利

<ImageView android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="?attr/homeIcon" />

并在 ImageView 中呈现 Drawable ic_home。

但我无法弄清楚如何以编程方式访问 Drawable

我试图通过定义一个持有者LayerList Drawable来解决这个问题,这会导致找不到资源异常:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="?attr/homeIcon" />
</layer-list>

Summary I want to access the Drawable defined in a custom defined Theme programmatically.

最佳答案

我认为您可以使用以下代码获取 Drawable:

TypedArray a = getTheme().obtainStyledAttributes(R.style.AppTheme, new int[] {R.attr.homeIcon});     
int attributeResourceId = a.getResourceId(0, 0);
Drawable drawable = getResources().getDrawable(attributeResourceId);
a.recycle();

关于android - 访问在主题和 attrs.xml android 中定义的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793183/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com