簡體   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