Androidはナイトモードを実現する高速で簡単な方法の実例を詳しく説明します。


Change Mode
プロジェクト住所:Change Mode
Implementation of night mode for Android.
最も簡単な方法でナイトモードを実現し、ListView、RecyclerViewをサポートします。
Prevew
ChangeMode
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();
}
詳細操作説明
ステップ1:カスタム属性

<?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>
ステップ2:ナイトスタイルファイルの設定

<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>
ステップ3:レイアウトファイルに対応する属性を設定します。

<?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>
text ColorAttr、backgroundAttr、background Drawable Attrの3つの属性に注意してください。現在のページをすぐに更新するには、該当する属性を追加します。
属性の説明
text ColorAttrフォントの色を変更する場合に設定します。R.atr.zztext Colorのようにztext Colorを転送すればいいです。例:app:text ColorAttr=「zztext Color」
backgroundAttrは背景色/背景画像を修正する時に設定します。同上例:ap:background Attr=「zzbackground」
background Drawable Attrは背景色/背景画像を修正する時に設定します。同上例:ap:background Drawable Attr=「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();
}
コードは3ステップを呼び出して、夜間の旅を開始できます。新規作成された画面がある場合、夜間モードの制御を追加します。コードコール:

//     view      
// ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary);
//ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent);
// ChangeModeController.getInstance().addTextColor(view,R.attr.colorAccent);
ナイトモードを変更する時に他の標準で定義されていない属性がある場合、Change ModeController.changeDayまたはChange ModeController.changeNightの後に以下のコードを呼び出して関連属性に値を付けます。
TypedValue atrTypedValue=Change ModeController.get Atter TypedVealue(this,R.at.ztext Color)
toolbar.setTitleText Color(getsResource().get Color(atrTypedValue.resource Id);
About me
Android Developer in ZhengZhou.
License
=====Copyright 2016 zhangke
Licensed under the Apache License,Version 2.0(the「License」)You may not use this file except in copliance with the License.You may obitain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0 Uless required by appicable law or agreed to in writing、ソフトware distributed under the License is distrited on an“AS IS”BASIS、WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND、eigther express or implied.See the License for the specific lagge governing permissions and limitations under the License.
以上は小编が绍介したAndroidのナイトモードを実现するための迅速で简単な方法の実例です。皆さんの助けになりたいです。もし何か疑问があれば、メッセージをください。