覆盖样式中的theme属性?

时间:2016-10-28 12:06:05

标签: android android-theme android-styles

我有一个项目,我在主题中定义了所有样式(按钮样式,复选框样式,EditText样式等)这样我就不需要在使用这些视图的布局中应用任何样式或主题,因为它们是由我的AppTheme自动应用的。

现在我遇到了一个问题。我想在主题中定义Switch样式,但它应该使用colorControlActivated和colorControlHighlight的另一种颜色。默认情况下,它使用我在主题中定义的colorPrimary,但如果我想更改它,该怎么办。

使用主题叠加或样式可以轻松修复问题,我将覆盖上面提到的所需属性,并在我使用Swtch视图的任何地方应用该样式/主题。但我想知道我是否可以避免这种情况,并在已定义colorControlActivated和colorControlHighlight的同一主题中为我的Switch视图定义默认样式。

我尝试了几件事,但这看起来像实际上可能有效但却没有:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="colorControlHighlight">@color/colorPrimary</item>
    <item name="colorSwitchThumbNormal">@color/white</item>


    <item name="switchStyle">@style/SwitchStyle</item>

</style>

<style name="AppTheme.GreenControlOverlay">
    <item name="colorControlActivated">@color/green</item>
    <item name="colorControlHighlight">@color/green</item>
</style>

SwitchStyle看起来像这样

<style name="SwitchStyle" parent="Widget.AppCompat.CompoundButton.Switch">
    <item name="android:theme">@style/AppTheme.GreenControlOverlay</item>
</style>

我不知道为什么这不起作用,因为如果我直接在我的AppTheme中设置android:theme它会覆盖colorControl属性,但如果你从样式覆盖它它不起作用。如果我在布局内的Switch视图中应用此GreenControlOverlay也可以。

甚至可以这样做吗?

如果您有任何疑问,请随时提出。我希望我能很好地解释我的问题。

0 个答案:

没有答案