首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自定义视图中的TextView不会在夜间模式下切换文本颜色

基础概念

自定义视图(Custom View)是指继承自Android的View类或其子类,并重写相关方法以实现特定功能的视图。TextView是Android中用于显示文本的控件。

夜间模式(Night Mode)是一种用户界面设计模式,通常在暗光环境下使用,以减少眼睛疲劳。Android系统支持夜间模式,并提供了一些API来帮助开发者实现这一功能。

相关优势

  1. 用户体验:夜间模式可以提供更好的视觉体验,减少眼睛疲劳。
  2. 节能:在暗光环境下,使用夜间模式可以减少屏幕亮度,从而节省电量。

类型

  1. 系统级夜间模式:由操作系统提供的夜间模式,所有应用都会自动适配。
  2. 应用级夜间模式:由应用自身提供的夜间模式,可以根据应用的需求进行定制。

应用场景

  1. 阅读应用:如新闻阅读、电子书阅读等。
  2. 社交媒体:如微博、朋友圈等。
  3. 系统设置:如系统主题设置。

问题原因

TextView在夜间模式下不会切换文本颜色,通常是因为以下原因:

  1. 没有正确设置夜间模式的资源:可能没有为夜间模式提供相应的颜色资源。
  2. 没有监听夜间模式的变化:可能没有在代码中监听系统夜间模式的变化,并更新TextView的颜色。

解决方法

以下是一个示例代码,展示如何在自定义视图中实现TextView在夜间模式下的文本颜色切换:

1. 创建颜色资源文件

res/values/colors.xml中定义颜色资源:

代码语言:txt
复制
<resources>
    <color name="text_color_day">#000000</color>
    <color name="text_color_night">#FFFFFF</color>
</resources>

res/values-night/colors.xml中定义夜间模式的颜色资源:

代码语言:txt
复制
<resources>
    <color name="text_color_day">#FFFFFF</color>
    <color name="text_color_night">#000000</color>
</resources>

2. 在自定义视图中设置颜色

代码语言:txt
复制
public class CustomTextView extends TextView {
    public CustomTextView(Context context) {
        super(context);
        init();
    }

    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        updateTextColor();
    }

    private void updateTextColor() {
        int textColor = getResources().getColor(isNightMode() ? R.color.text_color_night : R.color.text_color_day);
        setTextColor(textColor);
    }

    private boolean isNightMode() {
        return (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        AppCompatDelegate.getDefaultNightMode();
        updateTextColor();
    }
}

3. 监听夜间模式变化

在Activity或Fragment中监听夜间模式的变化:

代码语言:txt
复制
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.uiMode != Configuration.UI_MODE_NIGHT_NO && newConfig.uiMode != Configuration.UI_MODE_NIGHT_UNDEFINED) {
        // 夜间模式
        updateTextViewColor(true);
    } else {
        // 日间模式
        updateTextViewColor(false);
    }
}

private void updateTextViewColor(boolean isNightMode) {
    int textColor = isNightMode ? R.color.text_color_night : R.color.text_color_day;
    customTextView.setTextColor(getResources().getColor(textColor));
}

参考链接

通过以上步骤,可以确保TextView在夜间模式下正确切换文本颜色。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

轻听变色之谜

轻听是一款小而美的Android本地音乐播放器,而它特点之一就是拥有多彩外衣,如下: 其中,左边6张是白天模式几种不同主题色样式,右边是夜间模式。 那么轻听是如何实现变色呢?...主要是结合以下两种方式: 自定义Style和Theme 动态配置主题色 自定义Style和Theme Style和Theme主要用来实现白天模式夜间模式。...轻听这里,实现夜间模式分三步: 自定义Style 应用Style中属性 设置Theme 自定义Style 我们这里,就是写两个Style ,然后各自有一套对应颜色值。...简单介绍一几个主要颜色值: colorPrimary: 主题色 colorAccent: 辅助色(或强调色) textColorPrimary: 主要文字颜色,一般TextView文字都是这个颜色...问题 Style和Theme方式实现简单,非常适用于模式较为固定场景,如白天模式夜间模式。 但是,轻听在白天模式时候基础之上还有几种不同主题色。 简单聊一主题色。

1.8K00

打造自己 APP「冰与火百科」(四):WebView 交互、夜间模式

给大家介绍一简单 WebView 交互和夜间模式在「冰与火百科」中实现。...JavaScript 和 Android 交互,效果如下: image.png 夜间模式 关于夜间模式实现,主要是参考了 D_clock爱吃葱花 大神这篇文章,简单说一实现过程如下: 在 styles...之前,判断当前模式,并通过 setTheme 设置当前模式; 将屏幕内容转为 Bitmap,对其执行一个渐隐动画,实现切换时渐变效果; 监听模式切换,通过 TypedValue 和 Theme.resolveAttribute...Toolbar 假设已经拿到了切换颜色 color,修改 Toolbar 背景颜色和字体颜色: toolbar.setBackground(color); toolbar.setTitleTextColor...getWindow().setStatusBarColor( ContextCompat.getColor(mContext, typedValue.resourceId)); } 复制代码 夜间模式实现就到此

1.3K20
  • 对于Android日夜间模式实现探讨

    0x0001 ====== 关于 Android 日间/夜间模式切换相信大家在平时使用 APP 过程中都遇到过,比如知乎、简书中就有相关模式切换。...实现日间/夜间模式切换方案也有许多种,趁着今天有空来讲一日间/夜间模式切换几种实现方案,也可以做一个横向对比来看看哪种方案最好。.../夜间模式切换; 通过资源 id 映射,回调自定义 ThemeChangeListener 接口来处理日间/夜间模式切换。...这样就实现了日间/夜间模式切换换色了。...方法有很多种,重要是要根据自身情况选择合适方法去实现。在下面我会给出其他几种实现日/夜间模式切换方法链接,可以参考一。 好了,到了说再见时候了。 Goodbye !

    2K20

    Android编程实现夜间模式方法小结

    但手机和平板屏幕并不像Kindle那类电纸书水墨屏那么耐看, 由于自发光屏幕特性, 我们长期盯着屏幕看容易眼睛酸痛疲倦, 因此各种护目模式, 夜间模式在移动APP上得到广泛应用, 这的确也是一个贴心小功能...所以这次我们探讨几种实现方式, 一起学习总结下: 1. 利用屏幕亮度 当夜间使用手机等终端, 直接降低屏幕亮度, 能减少光线强度对眼镜刺激, 这也是最简单, 也相对有效方式....自定义Theme.(最常用方法) 自定义View, 相信很多人都很熟悉. 而自定义Theme跟这个类似, 也是实现夜间模式最常用方法, 因为它不止可以实现夜间模式, 还能实现常见主题更换功能....假设我们应用界面是白色背景, 黑色文字, 夜间模式就是黑色背景, 灰白色文字....这种夜间模式有别于第一种调节亮度, 由于背景和内容文字可以随意设置颜色和透明度, 这种夜间模式看起来更直观,也可以更舒服.

    75920

    自定义角标库

    ,而且角标的位置,颜色,形状多变,自然而然,我们就需要把这些类似的需求归纳后,做出一个通用大部分情况自定义View.今天给大家介绍我自己定义角标库和基本构思过程....角标支持(左 上 右 左上 左下 右上 右下)八个方向,支持在xml或java代码控制角标背景颜色和半径,角标文字颜色和大小, 环绕间隔大小,角标的形状(圆形,矩形,圆角矩形...: 一般角标颜色,形状之类都是会想到和加入,但是一些其他特性,我们可以从实际开发中慢慢归纳进来,这样自定义控件适应性才会更高. a.首先,TetxView角标是用最多,比如导航栏和选项卡...; c:再看看,小红点所在TextViewgravity属性不一定是center,这个TextView宽度也是未知,比如上面图中也可能为center-vertical,为了省掉占位...如果有更好方式,可以告知一. 3.TipLinearLayout/TipRadioGroup 自定义属性和set方法和TipTextView一致,分别继承至其后缀. (1)这两个控件里面的Child

    1.9K70

    短视频直播源码,日夜模式切换配置

    3393244292_39eb19358c_o.jpg 短视频直播源码,日夜模式切换配置相关代码 import android.app.Activity; import android.content.Context...        if (MyApplication.isNeightMode) {             initNightView();             // 设置windowmaneger背景图颜色...findViewById(R.id.fl_base);         fl_base.addView(initView());         initData();     }     // 设置夜间模式给试图设置一层布...     */     public void changeViewMode() {         // 判断当前模式,如果是白天模式,改成夜间,如果是夜间模式,改成白天         boolean...;         Log.i("com", "baseactivity     onActivityResult-----------------");     } } 以上就是短视频直播源码,日夜模式切换配置相关代码

    49000

    Dive into Android Custom View

    系统声明可以用来修改Button样式attribute,从下图中可以看出,Android系统中不同Theme都给Button组件设置了不同style。...这里我在demo应用中右上角增加了一个主题切换按钮,点击即可在白天模式夜间模式之间切换。...这里用了AppCompat中提供夜间模式实现方案,新建了values-night 目录,并在其中 styles.xml 中稍微修改了NumberTextView字体颜色。 ?...[前面两个NumberTextView在白天模式夜间模式字体颜色是不同,这些都不需要修改自定义View实现代码,只需要在合适位置配置相应属性值就可以了] 其实,自定义View中还有很多小细节...,例如对编辑模式更友好些,避免只显示一个类名在Preview视图中,还有对于View在异常情况进行数据保存和恢复工作等等,以后有空了再深入研究

    48730

    最新:iOS 13 适配

    iOS 13 UIColor 增加了很多动态颜色,我们来看下用系统提供颜色能实现怎么样效果。...UIColor.white } else { return UIColor.black } } label.textColor = labelColor 现在,我们做完了动图中背景色和文本颜色适配...image(with: traitCollection) 如何监听模式变化 上面我们说了如何获取当前模式,但是我们要搭配监听方法一起使用,当 light dark 模式切换时候,要把上面的代码再执行一遍...如何改变当前模式 我们可以看到在动图中是直接改系统模式,从而让 App 模式修改,但是对于某些有夜间模式功能 App 来说,如果用户打开了夜间模式,那么即使现在系统是 light 模式,也要强制用...如果 App 打开夜间模式,那么很简单我们只需要设置 window overrideUserInterfaceStyle 属性就好了。

    3.2K50

    如何在网页设计中实现深色模式:增强用户体验

    称为“深色模式”(有时称为“夜间模式”或“深色主题”)设计功能会修改用户界面的配色方案,使其主要使用深色或黑色背景以及浅色文本和图形元素。...文本对比:为了保持深色背景易读性,在深色模式文本和其他材料通常以较浅颜色呈现,例如白色或浅灰色。...亮度降低:深色模式界面非常适合在夜间或弱光条件使用,因为它们产生光线比浅色主题同类界面要少。 心理和生理方面 除了美观之外,黑暗模式还有益于用户心理和身体健康。...在本指南中,我们将探索如何使用 CSS 创建深色模式切换按钮并在浅色和深色模式之间切换。 CSS 变量(自定义属性) CSS 变量,也称为自定义属性,在实现深色模式中发挥着关键作用。...文本大小和字体调整:让消费者能够更改文本大小和字体样式,以适应自己品味和视觉要求。 使用高对比度颜色:为了提高易读性,特别是对于有色觉问题用户,请使用高对比度颜色组合。

    18010

    APP设计实例解析,深色模式为什么突然就火了?

    QQ在切换夜间模式时,则采用了一个平滑渐变过渡,让用户可以快速适应场景切换。...知乎在设计夜间模式时,知乎采用了主色调蓝色+深灰色搭配,深蓝和灰色作为背景,展示出效果既有强烈对比,又摆脱了深色压抑感。 与豆瓣不同,知乎文本颜色选择了对比度更低灰色,通过字重进行区分。...知乎在设计夜间模式时目标应该很明确,即只考虑用户在夜间使用,因此整体色调都很暗,在强光环境无法正常浏览。...同样,由于背景颜色太深,导致百度网盘文本和背景对比度太大,也存在难以阅读情况,对于诵读困难症患者来说,在阅读时会感觉文字在旋转、模糊。...从上述APP设计案例中,我为大家总结了以下几点建议以作参考: 1.避免使用纯黑色; 2.避免使用高饱和度颜色; 3.文本颜色选用高亮色,但不宜使用纯白; 4.做好情感化设计; 5.注意结构和层次感;

    1.5K30

    APP设计实例解析,深色模式为什么突然就火了?

    与传统夜间模式最大区别是,深色模式不仅保证了弱光环境体验,在强光下仍具有可读性。 虽然深色模式也被叫做暗黑模式,但并不代表要将底色变为纯黑。...QQ在切换夜间模式时,则采用了一个平滑渐变过渡,让用户可以快速适应场景切换。...知乎在设计夜间模式时,知乎采用了主色调蓝色+深灰色搭配,深蓝和灰色作为背景,展示出效果既有强烈对比,又摆脱了深色压抑感。 与豆瓣不同,知乎文本颜色选择了对比度更低灰色,通过字重进行区分。...知乎在设计夜间模式时目标应该很明确,即只考虑用户在夜间使用,因此整体色调都很暗,在强光环境无法正常浏览。...同样,由于背景颜色太深,导致百度网盘文本和背景对比度太大,也存在难以阅读情况,对于诵读困难症患者来说,在阅读时会感觉文字在旋转、模糊。

    1.9K50

    Android 10适配要点,深色主题

    于是,许多应用程序为了能够让用户在光线昏暗环境更加舒适地使用,会在应用内部提供一个一键切换夜间模式按钮。当用户开启了夜间模式,就会将应用程序整体色调都调整成更加适合于夜间浏览颜色。...不过,这种由应用程序自发实现夜间模式方式很难做到全局统一,即有些应用可能支持夜间模式,有些应用却不支持。...而且重复操作问题也很让人头疼,比如说我在一个应用中开启了夜间模式,在另外一个应用中还需要再开启一次,关闭夜间模式也需要进行同样重复操作。...然而,虽然现在界面中主要内容都已经自动切换成了深色主题,但是你会发现标题栏和悬浮按钮仍然保持着和浅色主题时一样颜色。...,使用浅色主题 Configuration.UI_MODE_NIGHT_YES -> {} // 夜间模式启用,使用深色主题 } } 如果什么都不做的话,当前Activity就好像并没有切换主题一样

    1.8K10

    Android-日夜主题切换(google推荐)

    android日夜间模式切换相比大家都接触过,我之前也经常用,但今天想给大家推荐一个google推荐实现方式,实现起来比较简单,就是咱们今天主角主题-----Theme.AppCompat.DayNight...image.png 聪明小伙伴已经猜出来了,这value文件夹下sytle是我们白天模式style,而value-nightsytle则是我们夜间模式style.而value-nightcolor...文件夹则是我们定义夜间模式颜色信息,同样我们还可以定义其他相关文件夹。...我们看一眼夜间模式我们定义color颜色: ? image.png 没啥说,也白天对应。...image.png 1.4如何切换我们白夜主题 我们设置好了白天和夜间主题文件,那如何切换呢?

    3.1K30

    现代 CSS 解决方案:accent-color 强调色

    accent-color 是从 Chrome 93 开始被得到支持一个不算太新属性。之前一直没有好好介绍一这个属性。直到最近在给一些系统整体切换主题色时候,更深入了解了一这个属性。...,更多时候,我们会将 accent-color 应用于: checkbox radio range progress 与 color-scheme 配合使用,适配日间夜间模式 还有一个容易忽略细节点...这通常包括浅色背景和深色文本。 dark:表示使用深色颜色方案。这通常包括深色背景和浅色文本。...} body { background: #000; color: #fff; } } body { color-scheme: light dark; } 下面是我在手机上调整日间模式夜间模式效果图...: 通过 @media (prefers-color-scheme: dark) {} 媒体查询,在黑夜模式,展示不同 accent-color。

    10210

    现代 CSS 解决方案:accent-color 强调色

    accent-color 是从 Chrome 93 开始被得到支持一个不算太新属性。之前一直没有好好介绍一这个属性。直到最近在给一些系统整体切换主题色时候,更深入了解了一这个属性。...,更多时候,我们会将 accent-color 应用于: checkbox[3] radio[4] range[5] progress[6] 与 color-scheme[7] 配合使用,适配日间夜间模式...这通常包括浅色背景和深色文本。 dark:表示使用深色颜色方案。这通常包括深色背景和浅色文本。...body { background: #000; color: #fff; } } body { color-scheme: light dark; } 下面是我在手机上调整日间模式夜间模式效果图...: 通过 @media (prefers-color-scheme: dark) {} 媒体查询,在黑夜模式,展示不同 accent-color。

    13310

    Android App Dark Theme(暗黑模式)适配指南

    这样在暗黑模式,OLED 就具有天生优势,只需要关闭黑色区域显示,就可以达到纯黑效果,而 LCD 背光层只能发射白光,所以在显示黑色时候,仍然会有部分光透过颜色薄膜,无法达到纯黑效果,只能达到相对黑效果...Android Q 深色模式(Dark Mode)源码解析​juejin.im 自定义适配 自定义适配关键在于,避免一切硬编码颜色值,建立 light 、night 两份 colors,通过定义相同名字...,在不同模式显示不同颜色。...根据需求对不同模式下相同名字颜色值做适配 这里推荐使用颜色本身场景意义来命名,例如上图中 colorBackground 表示背景颜色,colorOnError 表示在错误状态上,文字显示颜色...而上一部分自定义适配则是,通过定义一份主题,在同一主题下通过控制 light 、night 两种颜色来实现切换

    5.1K20
    领券