繁体   English   中英

在同一应用中同时使用浅色和深色复选框

[英]Use both light and dark checkboxes in same app

我正在使用自定义主题,其父主题是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"
  ...

风格的价值似乎没有任何可见的影响。

那么,如何使这些特定的CheckBox获得系统提供的浅色CheckBox图形,而应用程序中的其他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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM