開發者嘗試使用系統主題屬性 ?android:attr/textColorPrimary 或 ?android:attr/textColorSecondary 設置按鈕文本為白色,但結果顯示為黑色。原因是這些屬性值隨主題變化:Light 主題下為深色,Dark 主題下為淺色,非固定白色。
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="白色文本"
android:textColor="@android:color/white" />
res/values/colors.xml
<resources>
<color name="white">#FFFFFFFF</color>
<color name="text_white">#FFFFFFFF</color>
</resources>
佈局中使用
android:textColor="@color/text_white"
res/values/attrs.xml
<attr name="textColorWhite" format="color" />
res/values/themes.xml (Light)
<item name="textColorWhite">@android:color/white</item>
res/values-night/themes.xml (Dark)
<item name="textColorWhite">@android:color/white</item>
佈局中使用
android:textColor="?attr/textColorWhite"
| 主題 | textColorPrimary | textColorSecondary |
|---|---|---|
| Theme.Material.Light | #DE000000 (近黑) | #8A000000 (灰黑) |
| Theme.Material.Dark | #FFFFFFFF (白) | #B3FFFFFF (灰白) |
| Theme.Material3.Light | #1D1D1D (深灰) | #601D1D1D (中灰) |
系統主題屬性語義是「主要文本顏色」,而非「白色」。在淺色背景上應為深色,深色背景上應為淺色。
@android:color/white 或自定義 @color/white。textColorOnPrimary、textColorOnSurface),在 Light/Dark 主題中分別賦值。Color.WHITE 或 0xFFFFFFFF,統一使用資源引用。colorOnPrimary、colorOnSurface、colorOnBackground 等語義化顏色槽位。