我正在使用自定义主题,其父主题是Light.DarkActionBar
<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
如预期和预期的那样,这会在白色背景上产生深色的CheckBox(文本和复选框可绘制)。
我可以将深色主题用于反色:
<style name="MyTheme" parent="Theme.AppCompat">
再次,这按预期方式工作(轻巧的CheckBox文本和图形)。
该应用程序将前者用于浅色背景上的深色复选框,但是一个特定的UI(片段)在深色背景上具有CheckBoxes,所以我想仅将这些特定CheckBox的颜色翻转(变浅)。
我可以使用
textColor
为标签着色,但是CheckBox轮廓仍然显示为深色。我可以在API 21+(L)中使用使用着色,但是我需要支持低至16(使用AppCompat)的API。
我也尝试过
setColorFilter
,但是它还没有工作(没有任何日志就会崩溃-我正在继续调查),但是我对这种方法不抱希望,因为我希望图形表现为“自然”,例如,在检查的过渡期间切换强调色。我不想使用自定义图形,因为我希望图形由系统提供并为用户所熟悉,并与同一系统上的其他应用程序匹配。
我尝试直接在CheckBox上设置各种样式,但根本没有任何视觉更改:
<?xml version="1.0" encoding="utf-8"?>
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/ThemeOverlay.AppCompat.Dark"
...
风格的价值似乎没有任何可见的影响。
因此,当应用程序中的其他CheckBoxes仍然是暗色时,如何获得这些特定CheckBoxs的浅色,系统提供的CheckBox图形?
TYIA
最佳答案
View
以膨胀的Context
为主题。
在深色背景上实现深色复选框的一种方法是,将视图层次结构的整个深色部分填充到使用深色主题创建的ContextThemeWrapper
中。
ContextThemeWrapper darkContext = new ContextThemeWrapper(
context, R.style.MyThemeDark);
LayoutInflater darkInflater = LayoutInflater.from(darkContext);
View myDarkLayout = darkInflater.inflate(
R.layout.some_layout, parentView, true);
在API 21+上,可以使用
android:theme
属性实现此效果。some_layout.xml:
<LinearLayout
android:id="@+id/my_dark_layout"
android:theme="@style/MyDarkTheme"
...>
<CheckBox ... />
</LinearLayout>