關于閱讀類的app,有個夜間模式真是太重要了。那么有兩種方式可以實現(xiàn)夜間模式1:修改theme,重啟activity優(yōu)點:正兒八經的夜間模式,配色看著舒服缺點:圖片刺眼、閃屏2:使用一個帶黑色帶透明度的View,蓋在現(xiàn)有的activity上,效果類似你帶上墨鏡,看著太陽不刺眼。優(yōu)點:不用重啟activity,不閃屏;加上透明度過渡動畫,模式之間切換非常舒服,解決了1中,白底e79fa5e98193e58685e5aeb931333361323561圖片依舊刺眼的問題。;缺點:配色沒變化,就算帶上墨鏡,白天依舊是白天。因此,本方案整合了兩種解決方案。在夜間配色的基礎上,再加上一層墨鏡,讓圖片也變得柔和起來,效果圖如下:可以看待chrome圖標的白色底,在夜間模式下也變得柔和了好,下面來講講具體的實現(xiàn)步驟,本環(huán)節(jié)使用的開發(fā)環(huán)境是android Studio1 首先,在values下要準備好三個文件,沒有就自己創(chuàng)建attrs.xml(聲明屬性的類型,布局xml中用) reference可以使用系統(tǒng)的資源ID,比如R.color.gray; color可以直接使用#ffffff顏色代碼<?xml version="1.0" encoding="utf-8"?><resources><attr name="containerBackground" format="reference|color"></attr><attr name="cardBackground" format="reference|color"></attr><attr name="titleColor" format="reference|color"></attr><attr name="textColor" format="reference|color"></attr><attr name="selectorBtn" format="reference"></attr><attr name="selectorListItem" format="reference"></attr></resources>colors.xml(調色板,集中管理顏色hex)遵循 優(yōu)秀格式規(guī)范 ,即調色板模式,避免使用btn1,btn2,fontTitle,fontText之類的顏色名。<?xml version="1.0" encoding="utf-8"?><resources><color name="white">#fafafa</color><color name="white_dark">#f3f3f3</color><color name="gray_light">#cccccc</color><color name="gray">#777</color><color name="gray_dark">#383838</color><color name="green_light">#8e9ea4</color><color name="green">#34515c</color><color name="green_dark">#1e3e4a</color><color name="night_mask">#90000000</color></resources>styles.xml(日間、夜間主題)<resources><!-- Application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"></style><!-- 日間模式 --><style name="AppTheme.day" parent="AppTheme"><item name="containerBackground">@color/white_dark</item><item name="titleColor">@color/gray_dark</item><item name="textColor">@color/gray</item><item name="selectorBtn">@drawable/navigator_list_item_day</item><item name="selectorListItem">@drawable/list_item_day</item></style><!-- 夜間模式 --><style name="AppTheme.night" parent="AppTheme"><item name="containerBackground">@color/green_dark</item><item name="titleColor">@color/white_dark</item><item name="textColor">@color/green_light</item><item name="selectorBtn">@drawable/navigator_list_item_night</item><item name="selectorListItem">@drawable/list_item_night</item></style></resources>2定義activity父類,自動托管日間、夜間模式BaseApplication就是自己包裝的Application,通過它,保存日間、夜間模式Application和Activity,Service一樣是android框架的一個系統(tǒng)組件,當android程序啟動時系統(tǒng)會創(chuàng)建一個 application對象,用來存儲系統(tǒng)的一些信息。通常我們是不需要指定一個Application的,這時系統(tǒng)會自動幫我們創(chuàng)建,如果需要創(chuàng)建自己 的Application,也很簡單創(chuàng)建一個類繼承 Application并在manifest的application標簽中進行注冊(只需要給Application標簽增加個name屬性把自己的 Application的名字定入即可)。android系統(tǒng)會為每個程序運行時創(chuàng)建一個Application類的對象且僅創(chuàng)建一個,所以Application可以說是單例 (singleton)模式的一個類.且application對象的生命周期是整個程序中最長的,它的生命周期就等于這個程序的生命周期。因為它是全局 的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以通過Application來進行一些,數(shù)據(jù)傳遞,數(shù)據(jù)共享 等,數(shù)據(jù)緩存等操作。public class BaseActionBarActivity extends ActionBarActivity {private BaseApplication mBaseApp = null;private WindowManager mWindowManager = null;private View mNightView = null;private LayoutParams mNightViewParam;private boolean mIsAddedView;@Overrideprotected void onCreate(Bundle savedInstanceState) {mBaseApp = (BaseApplication) getApplication();if (mBaseApp.isNightMode())setTheme(R.style.AppTheme_night);elsesetTheme(R.style.AppTheme_day);super.onCreate(savedInstanceState);mIsAddedView = false;if (mBaseApp.isNightMode()) {initNightView();mNightView.setBackgroundResource(R.color.night_mask);}}@Overrideprotected void onDestroy() {if (mIsAddedView) {mBaseApp = null;mWindowManager.removeViewImmediate(mNightView);mWindowManager = null;mNightView = null;}super.onDestroy();}public void ChangeToDay() {mBaseApp.setIsNightMode(false);mNightView.setBackgroundResource(android.R.color.transparent);}public void ChangeToNight() {mBaseApp.setIsNightMode(true);initNightView();mNightView.setBackgroundResource(R.color.night_mask);}/*** wait a time until the onresume finish*/public void recreateOnResume() {new Handler().postDelayed(new Runnable() {public void run() {recreate();}}, 100);}private void initNightView() {if (mIsAddedView == true)return;mNightViewParam = new LayoutParams(LayoutParams.TYPE_APPLICATION,LayoutParams.FLAG_NOT_TOUCHABLE | LayoutParams.FLAG_NOT_FOCUSABLE,PixelFormat.TRANSPARENT);mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);mNightView = new View(this);mWindowManager.addView(mNightView, mNightViewParam);mIsAddedView = true;}}值得一提的是recreateOnResume()函數(shù),因為是從Resume里面重建activity的(避免閃屏)此時, 直接調用系統(tǒng)的recreate函數(shù)時,會報錯,原因是resume還沒執(zhí)行完,就被recreate了,因此,我們函數(shù)需要延時一會,等待系統(tǒng)完成resume就好了。一般延時1毫秒就可以了,但是我的app里面用到抽屜式導航欄,保存的時間要長點。準備工作到這里已經結束了。只要activity集成自該父類,就會自動托管日間、夜間模式了3調用方式子類只要調用ChangeToDay、ChangeToNight就可以完成模式的切換了。別忘了recreate activity來生效哦,實例代碼如下:void changeViewMode() {boolean isNight = getMyApplication().isNightMode();if (isNight)ChangeToDay();elseChangeToNight();recreate();}OK,如過你能堅持看到這里,說明閣下是有耐心的人,奉上一個彩蛋。關于WebView網頁如何實現(xiàn)日間、夜間模式。這個問題比我們現(xiàn)象的要簡單的多。因為網頁么,在生成html內容時,只要根據(jù)日間、還是夜間模式,替換css路徑為日間.css、夜間.css就好了。栗子來了,瞧,就是這個"{style}",我們要替換的對象。<html><head><title>Cnblogs</title><link rel="stylesheet" type="text/css" href="{style}"/><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0, user-scalable=no"/></head>在對webview加載內容文本時,替換該字符串的cssreplace("{style}",baseApplication.isNightMode() ? "style_night.css" : "style_day.css")結構如下:好了,大概思路,步驟代碼都已經給出了,各位可以輕松給自己的app加上夜間模式,就是在設置里提供一個ToggleButton,打開或者關閉夜間模式。同時在新的API里提供接口,對所有支持夜間模式的應用進行統(tǒng)一調度。打開總開關,默認7a64e58685e5aeb931333339666662開啟其他第三方應用的夜間模式。然后也設置一個規(guī)則,可忽略某個軟件。再自動化一些,可以設置個時間段,即默認開啟夜間模式的時間段。這個Feature的實現(xiàn)必然要第三方開發(fā)者支持。雖然有時候夜間模式看起來可有可無,但是對于喜歡睡前玩一下手機的人來說,也是個挺人性化的功能呢。當然目前Android API還沒有這個,不過我們還是可以在自己應用中給用戶接口,讓用戶選擇夜間模式,或者設置個時間段觸發(fā)該功能。寫了個小Demo,簡單了實現(xiàn)了切換夜間模式,總結一下:在工程目錄res/values/下新建attrs.xml,內容如下:view sourceprint?01.<?xml version="1.0" encoding="utf-8"?>02.<resources>03. 04.<attr name="btnColor" format="color" />05.<attr name="mainBackground" format="color" />06.<attr name="mainTextColor" format="reference|color" />07.<attr name="textString" format="string" />08. 09.</resources>然后就是在style中定義兩種主題,每一種主題都要至少包含以上attrs中的幾種屬性:view sourceprint?01.<?xml version="1.0" encoding="utf-8"?>02.<resources>03. 04.<!-- 默認 -->05.<style name="MyThemeDefault" parent="@android:style/Theme">06.<item name="btnColor">#00ff00</item>07.<item name="mainBackground">#ffffff</item>08.<item name="mainTextColor">#000000</item>09.<item name="textString">默認主題</item>10.</style>11. 12.<!-- 夜間 -->13.<style name="MyThemeNight" parent="@android:style/Theme">14.<item name="btnColor">#0000ff</item>15.<item name="mainBackground">#000000</item>16.<item name="mainTextColor">#ffffff</item>17.<item name="textString">夜間主題</item>18.</style>19. 20.</resources>主題定義好了,然后就是在布局文件中引用了,里面有?號的地方就是引用以上定義的label:view sourceprint?01.<?xml version="1.0" encoding="utf-8"?>02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"03.android:layout_width="fill_parent"04.android:layout_height="fill_parent"05.android:background="?mainBackground"06.android:orientation="vertical" >07. 08.<TextView09.android:layout_width="fill_parent"10.android:layout_height="wrap_content"11.android:text="?textString" />12. 13.<ImageView14.android:id="@+id/ivBook"15.android:layout_width="62dip"16.android:layout_height="42dip"17.android:layout_gravity="center"18.android:layout_marginTop="0dip"19.android:gravity="center"20.android:src="?btnColor" />21. 22.<Button23.android:id="@+id/btnSet"24.android:layout_width="wrap_content"25.android:layout_height="wrap_content"26.android:layout_marginTop="50dp"27.android:text="改變主題" />28. 29.<Button30.android:id="@+id/btnGet"31.android:layout_width="wrap_content"32.android:layout_height="wrap_content"33.android:layout_marginTop="50dp"34.android:text="Get Flag" />35. 36.</LinearLayout>下面就是在Activiy中定義要使用那種主題了:view sourceprint?01.public class MainActivity extends Activity {02.private boolean blFlag = false;03.private ImageView ivBook;04.private Button btnSet;05.private Button btnGet;06. 07.@Override08.public void onCreate(Bundle savedInstanceState) {09.super.onCreate(savedInstanceState);10.this.setTheme(R.style.MyThemeDefault);11.setContentView(R.layout.main);12.btnSet = (Button) findViewById(R.id.btnSet);13.btnGet = (Button) findViewById(R.id.btnGet);14.ivBook = (ImageView) findViewById(R.id.ivBook);15.btnSet.setOnClickListener(new onClickListenerImp());16.btnGet.setOnClickListener(new onClickListenerImp());17.ivBook.setOnClickListener(new onClickListenerImp());18. 19.}20. 21.class onClickListenerImp implements OnClickListener {22.@Override23.public void onClick(View v) {24.// TODO Auto-generated method stub25.if (v == btnSet || v == ivBook) {26.if (blFlag) {27.setTheme(R.style.MyThemeDefault);28.blFlag = false;29.} else if (!blFlag) {30.setTheme(R.style.MyThemeNight);31.blFlag = true;32.}33.setContentView(R.layout.main);34.btnSet = (Button) findViewById(R.id.btnSet);35.btnGet = (Button) findViewById(R.id.btnGet);36.ivBook = (ImageView) findViewById(R.id.ivBook);37.btnSet.setOnClickListener(new onClickListenerImp());38.btnGet.setOnClickListener(new onClickListenerImp());39.ivBook.setOnClickListener(new onClickListenerImp());40.} else if (v == btnGet) {41.Toast.makeText(MainActivity.this, "blFlag: " + blFlag,42.Toast.LENGTH_SHORT).show();43.}44.}45. 46.}47. 48.}要注意的是,在onClickListenerImp()類中的view sourceprint?1.setContentView(R.layout.main);這句后面,要重新綁定各組件及其,不然只能監(jiān)聽一次。這是因為在setContentView后,組件不是之前那個組件了,快捷百鍵(Ctrl+Alt+S)或度File——>Settings,打開問Settings界面“Appearance & Behavior——>Appearance”右答邊欄UI Options,在Theme選項中回選擇“答Darcula”即可本回答被提問者采納m.gy2thfx.cn防采集。
手機自帶
現(xiàn)在安卓手機基本都自帶夜間模式,有的叫做深色模式。
手機百度取消夜間模式,具體操作步驟如下:1、在手機應用中,打開手機百度,進入到手機百度的主界面,點
進入手機設置,點擊顯示和亮度。
安卓7.0開啟夜間模式介紹: Android 7.0正式版已經發(fā)布,然而此前在開發(fā)者預覽版
看到有個深色模式,勾選上。
1、打開手機界面,找到手機上的設置選項,點擊進入設置頁面。2、打開設置界面后,找到界面中的“顯示
勾選上之后都變成夜間深色了,不管打開什么軟件或者網頁,都是夜間模式。
三更半夜不睡覺,躲在被窩里玩手機。相信這樣的事情絕對不止我一個人干過,未來也依然會有無數(shù)人這么干下去
還可以自主調整亮度,色彩和護眼等。
關于閱讀類的app,有個夜間模式真是太重要了。那么有兩種方式可以實現(xiàn)夜間模式1:修改
色彩與護眼里可以勾選自然色彩顯示,這樣會根據(jù)不同環(huán)境自主調節(jié)。還可以設置色彩調節(jié)與色溫,還有護眼模式的開啟等。
為了方便我們實現(xiàn)Android夜間模式,我們下載一個軟件“月食-夜間模式”,該軟件簡單,免費,無廣告
色彩調節(jié)與色溫就根據(jù)個人喜歡的顏色選擇好即可。護眼模式可以設置開啟時間等,設定好了到時就自動啟動了,非常方便。
1、同為Android手機,不同牌子的,設置方法不同。2、以魅族手機為例,登錄qq后,向右劃就會出
第三方設置
如果不想用手機自帶,非要用第三方的也可以,去商城搜索夜間,會有很多夜間模式的軟件,下載一個。
原理很簡單:利用setTheme調用不同的風格,而白天與黑夜的區(qū)別就是在于夜間模式直接利用黑色背景,
打開這種軟件,一般第三方的夜間模式軟件里也可以直接在屏幕上調節(jié)屏幕亮度。
原理很簡單:利用setTheme調用不同的風格,而白天與黑夜的區(qū)別就是在于夜間模式直接利用黑色背景,
還有幾種顏色可以選擇,其實并沒有手機自帶的多。
手機百度取消夜間模式,具體操作步驟如下:1、在手機應用中,打開手機百度,進入到手機百度的主界面,點
另外會提供一些提醒,比如用眼時間,用眼報告等,這些功能看個人喜好,如果覺得有用可以用這些第三方的。缺點就是需要占用內存來安裝。
安卓7.0開啟夜間模式介紹: Android 7.0正式版已經發(fā)布,然而此前在開發(fā)者預覽版
為了方便我們實現(xiàn)Android夜間模式,我們下載一個軟件“月食-夜間模式”,該軟件簡單,免費,無廣告,無打擾。Android夜間模式安裝好后我們會看到軟件的圖標,7a686964616fe59b9ee7ad9431333365643464點擊該圖標后,你的Android手機亮度就會暗下來,再次點擊會恢復之前的狀態(tài),是不是很簡單。Android夜間模式如果你希望使用一些高級的功能,可以下拉通知欄,找到該應用的圖標,點擊進去。進去之后你可以做以下幾件事情:1.開啟或者關閉Android夜間模式2.快速選擇自己喜歡的濾鏡3.自由調節(jié)屏幕的亮度4.自由設置自己喜歡的濾鏡5.開啟或者關閉通知欄圖標(注:關閉后可以通過雙擊應用的圖標再次開啟)6.設置全局背景圖片(可以展現(xiàn)在任何應用里面,如微信,瀏覽器)Android夜間模式Android夜間模式開啟或者關閉Android夜間模式:上文第二步,只需點擊應用圖標即可開啟或者關閉夜間模式,當然你也可以在進入應用后自由開啟或者關閉。方法是點擊這個復選框Android夜間模式快速設置自己喜歡的濾鏡:點擊應用右側的“+”號,可以快速設置一個自己喜歡的夜間模式顏色。Android夜間模式調節(jié)夜間模式的亮度:除了預設的亮度外,我們還可以自己調節(jié)屏幕的亮度。Android夜間模式自定義自己喜歡的夜間模式濾鏡顏色:除了預設的集中夜間模式顏色外,應用還提供了一個可以讓用戶自定義的調色器,我們可以根據(jù)自己的喜好去自己配色。Android夜間模式開啟或者關閉通知欄:“月食-夜間模式”考慮到一部分用戶的使用習慣,允許用戶關閉該應用在通知欄的信息,這樣應用就會完全浸沒在后臺運行。我們只需要點擊桌面圖標,開啟夜間模式;再次點擊桌面圖標,關閉夜間模式。注:如果想再次進入應用,可以雙擊桌面圖標,這樣通知欄再次開啟,可以從通知欄進入應用。Android夜間模式設置背景圖片:“月食-夜間模式”一個非常強大的功能。它允許我們設置一張圖片作為任何應用的背景。應用內置了3張圖片可供選擇,如果希望設置自己的圖片,可以購買高級版本。Android夜間模式Android夜間模式Android夜間模式Android夜間模式Android夜間模式本回答被網友采納,三星手機本機沒有自帶此功能,可以嘗試下載第三方軟件實現(xiàn),1、同為Android手機,不同牌子的,設置方法不同。2、以魅族手機為例,登錄qq后,向右劃就會出現(xiàn),工具欄,點擊最下面夜間模式即可。如圖:,可能是扣扣軟件的問題,皮膚是扣扣的軟肋..本回答被提問者采納內容來自m.gy2thfx.cn請勿采集。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:0731-84117792 E-MAIL:11247931@qq.com