gpt4 book ai didi

Android根据主题以编程方式更改按钮

转载 作者:行者123 更新时间:2023-11-30 02:54:07 25 4
gpt4 key购买 nike

根据所选的应用程序主题(深色或浅色),我有两组不同的可绘制对象(也有深色和浅色)。如果我需要更新按钮的状态,比如更新暂停/播放按钮,我该怎么做,因为我无法在不知道当前主题的情况下引用原始内容。

例如,styles.xml

<style name="Theme.ServeStream.Dark" parent="@style/Theme.AppCompat">
<item name="attr/ic_action_pause_over_video">@drawable/ic_action_pause_over_video_dark</item>
<item name="attr/ic_action_play_over_video">@drawable/ic_action_play_over_video_dark</item>
<item name="attr/ic_action_previous">@drawable/ic_action_previous_dark</item>
<item name="attr/ic_action_next">@drawable/ic_action_next_dark</item>
</style>

<style name="Theme.ServeStream.Light" parent="@style/Theme.AppCompat.Light">
<item name="attr/ic_action_pause_over_video">@drawable/ic_action_pause_over_video_light</item>
<item name="attr/ic_action_play_over_video">@drawable/ic_action_play_over_video_light</item>
<item name="attr/ic_action_previous">@drawable/ic_action_previous_light</item>
<item name="attr/ic_action_next">@drawable/ic_action_next_light</item>
</style>

属性.xml:

<attr name="ic_action_pause_over_video" format="reference" />
<attr name="ic_action_play_over_video" format="reference" />
<attr name="ic_action_previous" format="reference" />
<attr name="ic_action_next" format="reference" />

但是,下面的代码不会编译:

mPauseButton.setImageResource(R.drawable.ic_action_pause_over_video);

最佳答案

您可以在代码中获取您为当前主题定义的资源 ID,例如:

TypedValue typedvalueattr = new TypedValue();

getTheme().resolveAttribute(R.attr.ic_action_pause_over_video, typedvalueattr, true);
mPauseButton.setImageResource(typedvalueattr.resourceId);

如何在 XML 布局中为多个主题使用样式化属性,您可以阅读 there .

关于Android根据主题以编程方式更改按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599148/

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