当 appTheme 从 styles.xml 选择为 "theme1" 时,如何使用不同的 drawable res 文件夹(例如 drawable-theme1)?这可能吗?

How to use a different drawable res folder (for eg. drawable-theme1) when the appTheme is selected as "theme1" from styles.xml? Is this possible?

目前我的 styles.xml 文件中有四个主题。 (主题 1、主题 2、主题 3、主题 4)。

我在 drawabledrawable-theme1[=30= 中都有 test_image.xml ] 文件夹。

我需要的是,仅 theme1,我需要来自 drawable-theme1 的资源,以及其他主题(theme2、theme3 , theme4), 我需要普通可绘制文件夹中的资源。

最后,在以编程方式设置图像视图时,我将调用 imageView.setResource(R.drawable.test_image)。必须根据我选择的主题来获取资源文件。

这是否可能?

我找不到任何与此相关的问题或类似问题。如果有人已经提供了解决方案,请帮我找到那个。谢谢

不能<themeName>用作qualifier
这意味着您不能使用drawable-themeName文件夹。

但是您可以在 attrs.xml 文件中定义自定义属性:

<resources>
    <attr name="myDrawable" format="reference" />
</resources>

然后在styles.xml在应用主题中你可以定义它:

<style name="AppTheme1" parent="Theme.MaterialComponents.DayNight">
    <!-- .....   -->
    <item name="myDrawable">@drawable/ic_add_24px</item>

</style>

最后在布局中你可以使用类似的东西:

<com.google.android.material.button.MaterialButton
    ....
    app:icon="?attr/myDrawable"/>

或以编程方式:

    MaterialButton button = findViewById(R.id.button);

    TypedValue typedValue = new TypedValue();
    getTheme().resolveAttribute(R.attr.myDrawable, typedValue, true);
    button.setIcon(ContextCompat.getDrawable(this,typedValue.resourceId));