我有一个项目,我在主题中定义了所有样式(按钮样式,复选框样式,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也可以。
甚至可以这样做吗?
如果您有任何疑问,请随时提出。我希望我能很好地解释我的问题。