gpt4 book ai didi

android - 使资源主题依赖

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

现在我们有两个图标(深色和浅色),如 ActionBar Icon Guide 中所述.

@drawable/ic_search_light 
@drawable/ic_search_dark

如何在 XML 菜单资源中引用这些图标:

<item android:title="Search" android:icon="哪个drawable在这里? "/>

每次在 Light 和 Dark 之间切换应用程序主题时,我是否必须更新所有这些可绘制引用?

最佳答案

有一种方法可以将 android drawables(以及 res/values 中的许多其他元素)定义为依赖于主题。

假设我们有两个 drawables,在这种情况下是菜单图标:

res/drawable/ic_search_light.png
res/drawable/ic_search_dark.png

我们想使用 ic_search_dark.png 作为默认的 Theme 或扩展它的应用程序主题,同样,我们想要 ic_search_light.png如果我们的应用程序主题更改为默认的 Theme.Light 或扩展它的某个主题。

/res/attrs.xml中定义一个具有唯一名称的通用属性,例如:

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

这是一个全局属性,格式类型是引用,如果是自定义 View ,它可以与样式属性一起定义:

<resources>
<declare-styleable name="custom_menu">
<attr name="theme_dependent_icon" format="reference"/>
</declare-styleable>
</resources>

接下来,定义两个主题,在 res/styles.xmlTheme 和 Theme.Light(或从这些主题继承的主题) > 或 res/themes.xml:

<resources>
<style name="CustomTheme" parent="android:Theme">
<item name="theme_dependent_icon" >@drawable/ic_search_dark</item>
</style>

<style name="CustomTheme.Light" parent="android:Theme.Light">
<item name="theme_dependent_icon" >@drawable/ic_search_light</item>
</style>
</resources>

最后,使用我们定义的引用属性来引用这些图标。在这种情况下,我们在定义菜单布局时使用

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="Menu Item" android:icon="?attr/theme_dependent_icon"/>
</menu>

?attr是指当前使用的主题的一个属性。

现在,我们可以使用以上两个主题进行应用:

<application android:theme="@style/CustomTheme">

<application android:theme="@style/CustomTheme.Light">

相应的资源将被相应地使用。

主题也可以在代码中应用,通过将其设置在Activity的onCreate()的最开始。

更新

this answer 中解释了从代码中访问这些主题相关资源的方法。 .

关于android - 使资源主题依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12338244/

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