自定义视图(Custom View)是指继承自Android的View类或其子类,并重写相关方法以实现特定功能的视图。TextView是Android中用于显示文本的控件。
夜间模式(Night Mode)是一种用户界面设计模式,通常在暗光环境下使用,以减少眼睛疲劳。Android系统支持夜间模式,并提供了一些API来帮助开发者实现这一功能。
TextView在夜间模式下不会切换文本颜色,通常是因为以下原因:
以下是一个示例代码,展示如何在自定义视图中实现TextView在夜间模式下的文本颜色切换:
在res/values/colors.xml
中定义颜色资源:
<resources>
<color name="text_color_day">#000000</color>
<color name="text_color_night">#FFFFFF</color>
</resources>
在res/values-night/colors.xml
中定义夜间模式的颜色资源:
<resources>
<color name="text_color_day">#FFFFFF</color>
<color name="text_color_night">#000000</color>
</resources>
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();
}
}
在Activity或Fragment中监听夜间模式的变化:
@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在夜间模式下正确切换文本颜色。
领取专属 10元无门槛券
手把手带您无忧上云