English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Пример кода быстрого и простого метода реализации ночного режима в Android

ChangeMode

Адрес проекта:ChangeMode

Реализация ночного режима для Android.

用最简单的方式实现夜间模式,支持ListView、RecyclerView。

Preview

Usage xml

android:background="?attr/zzbackground"
app:backgroundAttr="zzbackground"//如果当前页面要立即刷新,这里传入属性名称 比如 R.attr.zzbackground 传 zzbackground 即可
android:textColor="?attr/zztextColor"
app:textColorAttr="zztextColor"//如需立即刷新页面效果 同上

java

@Override
protected void onCreate(Bundle savedInstanceState) {
//1. Вызов этого метода на странице, где нужно немедленно переключить эффект
ChangeModeController.getInstance().init(this,R.attr.class).setTheme(this, R.style.DayTheme, R.style.NightTheme);
//Вызов этого метода на других страницах 
//ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//добавить дополнительный view в управление ночной режим
// ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary);
//ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent);
// ChangeModeController.getInstance().addTextColor(view, R.attr.colorAccent);
//2. 设置切换
//ChangeModeController.changeDay(this, R.style.DayTheme);
//ChangeModeController.changeNight(this, R.style.NightTheme);
}
@Override
protected void onDestroy() {
super.onDestroy();
//3. Вызов в onDestroy
ChangeModeController.onDestory();
}

详细操作描述

第一步:自定义属性

<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="zzbackground" format="color|reference"/>
<attr name="zzbackgroundDrawable" format="reference"/>
<attr name="zztextColor" format="color"/>
<attr name="zzItemBackground" format="color"/>
</resources>

第二步:配置夜间 style 文件

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="windowNoTitle">true</item>
</style>
<!--日间模式 -->
<style name="DayTheme" parent="AppTheme">
<item name="zzbackground">@color/dayBackground</item>
<item name="zzbackgroundDrawable">@drawable/ic_launcher</item>
<item name="zztextColor">@color/dayTextColor</item>
<item name="zzItemBackground">@color/dayItemBackground</item>
</style>
<!--夜间模式 -->
<style name="NightTheme" parent="AppTheme">
<item name="zzbackground">@color/nightBackground</item>
<item name="zzbackgroundDrawable">@color/nightBackground</item>
<item name="zztextColor">@color/nightTextColor</item>
<item name="zzItemBackground">@color/nightItemBackground</item>
<item name="colorPrimary">@color/colorPrimaryNight</item>
<item name="colorPrimaryDark">@color/colorPrimaryDarkNight</item>
<item name="colorAccent">@color/colorAccentNight</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

Установить значения свойств соответствующего режима для связанных свойств:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="dayBackground">#F2F4F7</color>
<color name="dayTextColor">#000</color>
<color name="dayItemBackground">#fff</color>
<color name="nightItemBackground">#37474F</color>
<color name="nightBackground">#263238</color>
<color name="nightTextColor">#fff</color>
</resources>

Третий шаг: настроить использование соответствующих свойств в файле макета

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="?attr/zzbackground"
app:backgroundAttr="zzbackground"
tools:context="com.thinkfreely.changemode.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:backgroundAttr="colorPrimary"
app:titleTextColor="?attr/zztextColor"
app:popupTheme="@style/AppTheme.PopupOverlay"
/>
</android.support.design.widget.AppBarLayout>
<Button
android:layout_width="match_parent"
android:layout_height="120dp"
android:gravity="center"
android:textColor="?attr/zztextColor"
app:textColorAttr="zztextColor"
android:background="?attr/zzItemBackground"
app:backgroundAttr="zzItemBackground"
android:padding="10dp"
android:layout_marginBottom="8dp"
android:textSize="22sp"
android:textAllCaps="false"
android:text="Переключение ночной模式的 by Mr.Zk" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</LinearLayout>

Обратите внимание на атрибуты textColorAttr, backgroundAttr и backgroundDrawableAttr. Если нужно обновить текущую страницу немедленно, добавьте соответствующий атрибут.

Атрибут Описание

textColorAttr устанавливается при изменении цвета шрифта. Например, R.attr.zztextColor передается как zztextColor. Пример: app:textColorAttr="zztextColor"
установка фона Attr при изменении цвета фона / изображения фона. Тоже самое. Пример: app:backgroundAttr="zzbackground"
backgroundDrawableAttr устанавливает цвет фона/изображение фона при изменении. Как и прежде. Пример: app:backgroundDrawableAttr="zzbackground"

Шаг четвертый: вызов java кода на странице

@Override
protected void onCreate(Bundle savedInstanceState) {
//1. Вызов этого метода на странице, где нужно немедленно переключить эффект
ChangeModeController.getInstance().init(this,R.attr.class).setTheme(this, R.style.DayTheme, R.style.NightTheme);
//Вызов этого метода на других страницах 
//ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//2. Настройка переключения между ночным и дневным режимами
//ChangeModeController.changeDay(this, R.style.DayTheme);//переключение на дневной режим
//ChangeModeController.changeNight(this, R.style.NightTheme);//переключение на ночной режим
}
@Override
protected void onDestroy() {
super.onDestroy();
//3. Вызов в onDestroy
ChangeModeController.onDestory();
}

Три шага кода, чтобы начать ночное путешествие. Если на странице есть ново созданные виджеты, которые нужно добавить в управление ночным режимом, вызов кода:

//добавить дополнительный view в управление ночной режим
// ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary);
//ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent);
// ChangeModeController.getInstance().addTextColor(view, R.attr.colorAccent);

Если при изменении ночного режима есть другие нестандартно определенные свойства, можно вызвать следующий код после ChangeModeController.changeDay или ChangeModeController.changeNight, чтобы присвоить значение соответствующему свойству:

TypedValue attrTypedValue = ChangeModeController.getAttrTypedValue(this, R.attr.zztextColor);
toolbar.setTitleTextColor(getResources().getColor(attrTypedValue.resourceId));
О мне
Android-разработчик в Чжэнчжоу.

Лицензия
======= Авторское право 2016 год zhangke
Под лицензией Apache License, Version 2.0 ("Лицензия"); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу http://www.apache.org/licenses/LICENSE-2.0 Если это не требуется по закону или не согласовано в письменной форме, программное обеспечение, распространяемое под Лицензией, распространяется на "КАК ЕСТЬ", БЕЗ ГАРАНТИЙ И УСЛОВИЙ КАКОГО ЛИБО ВИДА, явных или подразумеваемых. См. Лицензию для конкретного языка, регулирующего разрешения и ограничения Лицензии.

Как уже было сказано, это краткое и простое руководство по реализации ночного режима в Android, которое я хочу представить вам. Надеюсь, это будет полезно для вас. Если у вас есть какие-либо вопросы, пожалуйста, оставляйте комментарии, я отвечу вам своевременно. Спасибо за поддержку сайта呐喊 руководств! Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу notice#oldtoolbag.com (при отправке письма замените # на @),并提供 соответствующие доказательства. При обнаружении фактов нарушения, сайт незамедлительно удаляет涉嫌侵权的内容.

Следующее является кратким и простым способом реализации ночного режима в Android, который я хочу представить вам, надеюсь, это поможет вам. Если у вас есть какие-либо вопросы, пожалуйста, оставляйте комментарии, я отвечу вам своевременно. В этом я также очень благодарен вам за поддержку сайта呐喊 руководств! Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу notice#oldtoolbag.com (при отправке письма замените # на @),并提供相关证据. При обнаружении фактов нарушения, сайт незамедлительно удаляет涉嫌侵权的内容.

Основной учебник
Рекомендуем также