我想为我的Android应用程序创建一个红色的“夜间模式”

时间:2011-09-09 03:53:17

标签: java android colors

我正在创建一个供飞行员使用的应用程序。它主要使用TextViewEditTextButton等。换句话说,不是非常耗费图形。

在夜间使用时,我希望用户能够切换到“夜间模式”,屏幕上的所有内容都是红色和黑色......就像Google Sky Map应用程序一样。 (这对于飞行员来说非常重要,因为红色不会像其他颜色那样破坏眼睛的自然夜视适应性。)

最好的方法是什么?我找到了ColorFilter等API,但我不确定如何应用这些应用程序。

2 个答案:

答案 0 :(得分:2)

如果你只是在谈论改变布局中各种视图的颜色而不是布局本身的结构,那么我建议你只使用样式来做。

即。为构成布局的各种视图定义两组样式 - 一组用于夜间模式,另一组用于日间模式。在您的活动中,它会成为在每个视图上调用setStyle()以在日夜之间切换它的情况。

为您的风格提出合理的命名惯例和亲子关系计划将使您的生活更轻松。例如MyText.Large vs MyText.Large.Night

Android developer doc on Themes and Style是一个很好的起点。

答案 1 :(得分:1)

创建日夜主题并以编程方式设置它将起作用。但它也要求你复制你的样式,只是为了指定不同的drawables / colors。

相反,您可以维护一种风格并使用Android内置的日/夜模式支持。正如您可以拥有单个布局的多种变体(用于横向或纵向屏幕方向),可绘制(对于不同的像素密度)和字符串(对于不同的区域设置),您还可以拥有可绘制和颜色的日夜版本。说明符是“-night”和“-night”但你可能想要使用“-night”或什么都没有,使你的日期版本成为默认版本。例如:

res/drawable/fancy-button-background.9.png
res/drawable-night/fancy-button-background.9.png

Android应该能够自动切换日/夜模式,但有关如何以及何时发生的详细信息对我来说有点不清楚。要自己更改模式,可以使用UiModeManager#setNightMode()。只需确保首先使用enableCarMode(0)启用汽车模式。