Android SDK Supportは夜間、昼間モードの切り替えを持参しています。
5512 ワード
このブログを書く目的はAndroid dSDKが持っているsupport libを利用してAPPの日中/ナイトモードの切り替えを実現するように教えることです。最近多くの書き込みがこの日のナイトモードの切り替えに関するオープンソースプロジェクトをしていますが、Android dSDK Supportにはすでに良いサポートがありました。
本文のdemoは住所をダウンロードします。文章の最後に、文書を読み終わったら、まだダウンロードできません。
--------------------------------------------------
効果のデモンストレーション
左はAndroid 4.1の効果で、右はAndroid 6.0の効果です。
ステップを実行
私は私のデモを例にとって、スタイルを変更したいです。Day/Nightに対して異なるスタイルやColorを設定する必要があります。切替モードはJavaコードで実現します。
まず新規プロジェクトを作成し、初期のActivityを選択する場合はBaseActivityを選択します。
一、appcomppatライブラリに依存する
app moduleのgradleでappcomppatライブラリに依存しています。バージョンは最低23.00です。
res/values/style.xmlを開いて、元のものをください。
三、異なるモードのために異なるcolorsを書く。
上のAppThe meというテーマに気づいたら、実は三つの色を設定しています。ここで一つの効果を簡単に実現します。この三つの色を修正すればいいです。resの下にvalues-nightのフォルダを新規作成します。
ここでまずこのフォルダの役割を説明します。私達のデフォルトのモードは普通は昼モードです。だから、システムはvaluesの中の値を読みます。夜間モードに切り替えたら、values-nightの下の値を読みます。styleかそれともカラーかに関わらず。ですから、簡単に色を変えます。新しいcolors.xmlを作ります。まずvaluesの中のcolors.xmlを見てみます。
その後、valuesのcolors.xmlファイルをvalus-nightにコピーし、色を変更します。
私のところは簡単に深い藍色を薄い藍色に変えて、玫紅を金色に変えます。
はい、styelとカラーはここで技術です。以下はjavaコード切替モードです。
Javaコード制御日中ナイトモード
まずこの機能はsupport-appcomputから来ていますので、ActivityはAppComputActivityを継承しています。
以下の3つのモードは、初期化、または明示的な呼び出しに使用されてもよい。
第一に、自動モード、もし私達のアプリに測位権限、ネットワーク権限などがあれば、システムは自動的に今は夜ですか?それとも昼ですか?ユーザーがAPPを開いたら自動的に応答モードに切り替わります。このモードはAPP初期化やAppliationで静的コードを使って速く設定できます。
get Delegate().set Local NightMode(AppComppat Delegate.MODE_NIGHT_NO)
recreate();
第三の方法は夜間モードで、呼び出し後にActivityのrecreateを呼び出す必要があります。
get Delegate().set Local NightMode(AppComppat Delegate.MODE_NIGHT_YES);
recreate();
はい、とても乱暴です。こんなに簡単です。もう終わりました。
締め括りをつける
1.実現したいのが複雑なら、values-nightに異なる色を設定するだけでなく、異なったスタイルを構築して、異なるviewに引用することもできます。
2.注意すべき点は二つあります。一つはappまたはactivityが引用するスタイルはThe me.AppComppat.DayNightまたはそのサブスタイル、もう一つはget Delegate()を呼び出します。set LocalNightMode()あなたのActivityはAppComputActivityを継承しなければなりません。
文章Demoソースダウンロード:http://xiazai.jb51.net/201609/yuanma/AndroidDayNightSample(jb 51.net)rar
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
本文のdemoは住所をダウンロードします。文章の最後に、文書を読み終わったら、まだダウンロードできません。
--------------------------------------------------
効果のデモンストレーション
左はAndroid 4.1の効果で、右はAndroid 6.0の効果です。
ステップを実行
私は私のデモを例にとって、スタイルを変更したいです。Day/Nightに対して異なるスタイルやColorを設定する必要があります。切替モードはJavaコードで実現します。
まず新規プロジェクトを作成し、初期のActivityを選択する場合はBaseActivityを選択します。
一、appcomppatライブラリに依存する
app moduleのgradleでappcomppatライブラリに依存しています。バージョンは最低23.00です。
dependencies {
compile 'com.android.support:appcompat-v7:23.4.0'
}
今日のブログは昼と夜のモードを切り替える原理はスタイルを切り替えることです。私達のページでは様々なスタイルを引用していますので、スタイルを定義するためにあればいいです。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.yanzhenjie.daynight.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android: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:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
二、スタイルを修正するres/values/style.xmlを開いて、元のものをください。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
変更:
<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
つまりLightをDayNight、DayNightというテーマまたはそのサブテーマに変えてホワイトナイトモードの切り替えをサポートします。三、異なるモードのために異なるcolorsを書く。
上のAppThe meというテーマに気づいたら、実は三つの色を設定しています。ここで一つの効果を簡単に実現します。この三つの色を修正すればいいです。resの下にvalues-nightのフォルダを新規作成します。
ここでまずこのフォルダの役割を説明します。私達のデフォルトのモードは普通は昼モードです。だから、システムはvaluesの中の値を読みます。夜間モードに切り替えたら、values-nightの下の値を読みます。styleかそれともカラーかに関わらず。ですから、簡単に色を変えます。新しいcolors.xmlを作ります。まずvaluesの中のcolors.xmlを見てみます。
その後、valuesのcolors.xmlファイルをvalus-nightにコピーし、色を変更します。
私のところは簡単に深い藍色を薄い藍色に変えて、玫紅を金色に変えます。
はい、styelとカラーはここで技術です。以下はjavaコード切替モードです。
Javaコード制御日中ナイトモード
まずこの機能はsupport-appcomputから来ていますので、ActivityはAppComputActivityを継承しています。
以下の3つのモードは、初期化、または明示的な呼び出しに使用されてもよい。
第一に、自動モード、もし私達のアプリに測位権限、ネットワーク権限などがあれば、システムは自動的に今は夜ですか?それとも昼ですか?ユーザーがAPPを開いたら自動的に応答モードに切り替わります。このモードはAPP初期化やAppliationで静的コードを使って速く設定できます。
{
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
}
第二に、デイモードは、呼び出し後にActivityのrecreateを呼び出す必要があります。get Delegate().set Local NightMode(AppComppat Delegate.MODE_NIGHT_NO)
recreate();
第三の方法は夜間モードで、呼び出し後にActivityのrecreateを呼び出す必要があります。
get Delegate().set Local NightMode(AppComppat Delegate.MODE_NIGHT_YES);
recreate();
はい、とても乱暴です。こんなに簡単です。もう終わりました。
締め括りをつける
1.実現したいのが複雑なら、values-nightに異なる色を設定するだけでなく、異なったスタイルを構築して、異なるviewに引用することもできます。
2.注意すべき点は二つあります。一つはappまたはactivityが引用するスタイルはThe me.AppComppat.DayNightまたはそのサブスタイル、もう一つはget Delegate()を呼び出します。set LocalNightMode()あなたのActivityはAppComputActivityを継承しなければなりません。
文章Demoソースダウンロード:http://xiazai.jb51.net/201609/yuanma/AndroidDayNightSample(jb 51.net)rar
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。