gpt4 book ai didi

android - getTheme().applyStyle(...) 多次而不覆盖前一个

转载 作者:行者123 更新时间:2023-11-29 17:05:49 25 4
gpt4 key购买 nike

当我多次将额外属性应用于 AppTheme 时,它​​会覆盖前一个。这是我正在使用的代码:

主要 Activity :

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {

getTheme().applyStyle(R.style.AppTheme_OverlayPrimaryRed);

// If you change `false` to `true`, the overlay above is overwritten.
if (false) {
getTheme().applyStyle(R.style.AppTheme_OverlayAccentRed);
}

super.onCreate(savedInstanceState);

...
}

AppTheme.OverlayPrimaryRed:

<style name="AppTheme.OverlayPrimaryRed">
<item name="colorPrimary">@color/material_red_500</item>
<item name="colorPrimaryDark">@color/material_red_700</item>
</style>

AppTheme.OverlayAccentRed:

<style name="AppTheme.OverlayAccentRed">
<item name="colorAccent">@color/material_red_A200</item>
</style>

有什么办法可以解决这个问题吗?

最佳答案

您的样式定义 AppTheme.OverlayPrimaryRedAppTheme.OverlayAccentRed 隐式继承自 AppTheme。由于 AppTheme 可能还包含 colorPrimarycolorPrimaryDark 的定义,第二个 applyStyle 语句也将设置这些属性,撤消第一个 applyStyle 调用。

因此,我在对 this question 的回答中没有在样式覆盖名称中使用任何点。 .

如果出于美观原因想要保留点,您可以像这样为叠加层定义一个空的父级样式:

<style name="Overlay">
</style>

<style name="Overlay.PrimaryRed">
<item name="colorPrimary">@color/material_red_500</item>
<item name="colorPrimaryDark">@color/material_red_700</item>
</style>

<style name="Overlay.AccentRed">
<item name="colorAccent">@color/material_red_A200</item>
</style>

关于android - getTheme().applyStyle(...) 多次而不覆盖前一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41779821/

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