關(guān)于閱讀類的app,有個(gè)夜間模式真是太重要了。那么有兩種方式可以實(shí)現(xiàn)夜間模式1:修改theme,重啟activity優(yōu)點(diǎn):正兒八經(jīng)的夜間模式,配色看著舒服缺點(diǎn):圖片刺眼、閃屏2:使用一個(gè)帶黑色帶透明度的View,蓋在現(xiàn)有的activity上,效果類似你帶上墨鏡,看著太陽(yáng)不刺眼。優(yōu)點(diǎn):不用重啟activity,不閃屏;加上透明度過(guò)渡動(dòng)畫,模式之間切換非常舒服,解決了1中,白底e79fa5e98193e58685e5aeb931333361323561圖片依舊刺眼的問(wèn)題。;缺點(diǎn):配色沒(méi)變化,就算帶上墨鏡,白天依舊是白天。因此,本方案整合了兩種解決方案。在夜間配色的基礎(chǔ)上,再加上一層墨鏡,讓圖片也變得柔和起來(lái),效果圖如下:可以看待chrome圖標(biāo)的白色底,在夜間模式下也變得柔和了好,下面來(lái)講講具體的實(shí)現(xiàn)步驟,本環(huán)節(jié)使用的開(kāi)發(fā)環(huán)境是android Studio1 首先,在values下要準(zhǔn)備好三個(gè)文件,沒(méi)有就自己創(chuàng)建attrs.xml(聲明屬性的類型,布局xml中用) reference可以使用系統(tǒng)的資源ID,比如R.color.gray; color可以直接使用#ffffff顏色代碼colors.xml(調(diào)色板,集中管理顏色hex)遵循 優(yōu)秀格式規(guī)范 ,即調(diào)色板模式,避免使用btn1,btn2,fontTitle,fontText之類的顏色名。#fafafa#f3f3f3#cccccc#777#383838#8e9ea4#34515c#1e3e4a#90000000styles.xml(日間、夜間主題)2定義activity父類,自動(dòng)托管日間、夜間模式BaseApplication就是自己包裝的Application,通過(guò)它,保存日間、夜間模式Application和Activity,Service一樣是android框架的一個(gè)系統(tǒng)組件,當(dāng)android程序啟動(dòng)時(shí)系統(tǒng)會(huì)創(chuàng)建一個(gè) application對(duì)象,用來(lái)存儲(chǔ)系統(tǒng)的一些信息。通常我們是不需要指定一個(gè)Application的,這時(shí)系統(tǒng)會(huì)自動(dòng)幫我們創(chuàng)建,如果需要?jiǎng)?chuàng)建自己 的Application,也很簡(jiǎn)單創(chuàng)建一個(gè)類繼承 Application并在manifest的application標(biāo)簽中進(jìn)行注冊(cè)(只需要給Application標(biāo)簽增加個(gè)name屬性把自己的 Application的名字定入即可)。android系統(tǒng)會(huì)為每個(gè)程序運(yùn)行時(shí)創(chuàng)建一個(gè)Application類的對(duì)象且僅創(chuàng)建一個(gè),所以Application可以說(shuō)是單例 (singleton)模式的一個(gè)類.且application對(duì)象的生命周期是整個(gè)程序中最長(zhǎng)的,它的生命周期就等于這個(gè)程序的生命周期。因?yàn)樗侨?的單例的,所以在不同的Activity,Service中獲得的對(duì)象都是同一個(gè)對(duì)象。所以通過(guò)Application來(lái)進(jìn)行一些,數(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ù),因?yàn)槭菑腞esume里面重建activity的(避免閃屏)此時(shí), 直接調(diào)用系統(tǒng)的recreate函數(shù)時(shí),會(huì)報(bào)錯(cuò),原因是resume還沒(méi)執(zhí)行完,就被recreate了,因此,我們函數(shù)需要延時(shí)一會(huì),等待系統(tǒng)完成resume就好了。一般延時(shí)1毫秒就可以了,但是我的app里面用到抽屜式導(dǎo)航欄,保存的時(shí)間要長(zhǎng)點(diǎn)。準(zhǔn)備工作到這里已經(jīng)結(jié)束了。只要activity集成自該父類,就會(huì)自動(dòng)托管日間、夜間模式了3調(diào)用方式子類只要調(diào)用ChangeToDay、ChangeToNight就可以完成模式的切換了。別忘了recreate activity來(lái)生效哦,實(shí)例代碼如下:void changeViewMode() {boolean isNight = getMyApplication().isNightMode();if (isNight)ChangeToDay();elseChangeToNight();recreate();}OK,如過(guò)你能堅(jiān)持看到這里,說(shuō)明閣下是有耐心的人,奉上一個(gè)彩蛋。關(guān)于WebView網(wǎng)頁(yè)如何實(shí)現(xiàn)日間、夜間模式。這個(gè)問(wèn)題比我們現(xiàn)象的要簡(jiǎn)單的多。因?yàn)榫W(wǎng)頁(yè)么,在生成html內(nèi)容時(shí),只要根據(jù)日間、還是夜間模式,替換css路徑為日間.css、夜間.css就好了。栗子來(lái)了,瞧,就是這個(gè)"{style}",我們要替換的對(duì)象。
Cnblogs在對(duì)webview加載內(nèi)容文本時(shí),替換該字符串的cssreplace("{style}",baseApplication.isNightMode() ? "style_night.css" : "style_day.css")結(jié)構(gòu)如下:好了,大概思路,步驟代碼都已經(jīng)給出了,各位可以輕松給自己的app加上夜間模式,就是在設(shè)置里提供一個(gè)ToggleButton,打開(kāi)或者關(guān)閉夜間模式。同時(shí)在新的API里提供接口,對(duì)所有支持夜間模式的應(yīng)用進(jìn)行統(tǒng)一調(diào)度。打開(kāi)總開(kāi)關(guān),默認(rèn)7a64e58685e5aeb931333339666662開(kāi)啟其他第三方應(yīng)用的夜間模式。然后也設(shè)置一個(gè)規(guī)則,可忽略某個(gè)軟件。再自動(dòng)化一些,可以設(shè)置個(gè)時(shí)間段,即默認(rèn)開(kāi)啟夜間模式的時(shí)間段。這個(gè)Feature的實(shí)現(xiàn)必然要第三方開(kāi)發(fā)者支持。雖然有時(shí)候夜間模式看起來(lái)可有可無(wú),但是對(duì)于喜歡睡前玩一下手機(jī)的人來(lái)說(shuō),也是個(gè)挺人性化的功能呢。當(dāng)然目前Android API還沒(méi)有這個(gè),不過(guò)我們還是可以在自己應(yīng)用中給用戶接口,讓用戶選擇夜間模式,或者設(shè)置個(gè)時(shí)間段觸發(fā)該功能。寫了個(gè)小Demo,簡(jiǎn)單了實(shí)現(xiàn)了切換夜間模式,總結(jié)一下:在工程目錄res/values/下新建attrs.xml,內(nèi)容如下:view sourceprint?01.02.
03. 04.05.06.07.08. 09.然后就是在style中定義兩種主題,每一種主題都要至少包含以上attrs中的幾種屬性:view sourceprint?01.02.
03. 04.05.11. 12.13.19. 20.主題定義好了,然后就是在布局文件中引用了,里面有?號(hào)的地方就是引用以上定義的label:view sourceprint?01.02.
07. 08.12. 13.21. 22.28. 29.35. 36.下面就是在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)聽(tīng)一次。這是因?yàn)樵趕etContentView后,組件不是之前那個(gè)組件了,快捷百鍵(Ctrl+Alt+S)或度File——>Settings,打開(kāi)問(wèn)Settings界面“Appearance & Behavior——>Appearance”右答邊欄UI Options,在Theme選項(xiàng)中回選擇“答Darcula”即可本回答被提問(wèn)者采納www.51dongshi.com防采集。
手機(jī)自帶
現(xiàn)在安卓手機(jī)基本都自帶夜間模式,有的叫做深色模式。
手機(jī)百度取消夜間模式,具體操作步驟如下:1、在手機(jī)應(yīng)用中,打開(kāi)手機(jī)百度,進(jìn)入到手機(jī)百度的主界面,點(diǎn)
進(jìn)入手機(jī)設(shè)置,點(diǎn)擊顯示和亮度。
安卓7.0開(kāi)啟夜間模式介紹: Android 7.0正式版已經(jīng)發(fā)布,然而此前在開(kāi)發(fā)者預(yù)覽版
看到有個(gè)深色模式,勾選上。
1、打開(kāi)手機(jī)界面,找到手機(jī)上的設(shè)置選項(xiàng),點(diǎn)擊進(jìn)入設(shè)置頁(yè)面。2、打開(kāi)設(shè)置界面后,找到界面中的“顯示
勾選上之后都變成夜間深色了,不管打開(kāi)什么軟件或者網(wǎng)頁(yè),都是夜間模式。
三更半夜不睡覺(jué),躲在被窩里玩手機(jī)。相信這樣的事情絕對(duì)不止我一個(gè)人干過(guò),未來(lái)也依然會(huì)有無(wú)數(shù)人這么干下去
還可以自主調(diào)整亮度,色彩和護(hù)眼等。
關(guān)于閱讀類的app,有個(gè)夜間模式真是太重要了。那么有兩種方式可以實(shí)現(xiàn)夜間模式1:修改
色彩與護(hù)眼里可以勾選自然色彩顯示,這樣會(huì)根據(jù)不同環(huán)境自主調(diào)節(jié)。還可以設(shè)置色彩調(diào)節(jié)與色溫,還有護(hù)眼模式的開(kāi)啟等。
為了方便我們實(shí)現(xiàn)Android夜間模式,我們下載一個(gè)軟件“月食-夜間模式”,該軟件簡(jiǎn)單,免費(fèi),無(wú)廣告
色彩調(diào)節(jié)與色溫就根據(jù)個(gè)人喜歡的顏色選擇好即可。護(hù)眼模式可以設(shè)置開(kāi)啟時(shí)間等,設(shè)定好了到時(shí)就自動(dòng)啟動(dòng)了,非常方便。
1、同為Android手機(jī),不同牌子的,設(shè)置方法不同。2、以魅族手機(jī)為例,登錄qq后,向右劃就會(huì)出
第三方設(shè)置
如果不想用手機(jī)自帶,非要用第三方的也可以,去商城搜索夜間,會(huì)有很多夜間模式的軟件,下載一個(gè)。
原理很簡(jiǎn)單:利用setTheme調(diào)用不同的風(fēng)格,而白天與黑夜的區(qū)別就是在于夜間模式直接利用黑色背景,
打開(kāi)這種軟件,一般第三方的夜間模式軟件里也可以直接在屏幕上調(diào)節(jié)屏幕亮度。
原理很簡(jiǎn)單:利用setTheme調(diào)用不同的風(fēng)格,而白天與黑夜的區(qū)別就是在于夜間模式直接利用黑色背景,
還有幾種顏色可以選擇,其實(shí)并沒(méi)有手機(jī)自帶的多。
手機(jī)百度取消夜間模式,具體操作步驟如下:1、在手機(jī)應(yīng)用中,打開(kāi)手機(jī)百度,進(jìn)入到手機(jī)百度的主界面,點(diǎn)
另外會(huì)提供一些提醒,比如用眼時(shí)間,用眼報(bào)告等,這些功能看個(gè)人喜好,如果覺(jué)得有用可以用這些第三方的。缺點(diǎn)就是需要占用內(nèi)存來(lái)安裝。
安卓7.0開(kāi)啟夜間模式介紹: Android 7.0正式版已經(jīng)發(fā)布,然而此前在開(kāi)發(fā)者預(yù)覽版
為了方便我們實(shí)現(xiàn)Android夜間模式,我們下載一個(gè)軟件“月食-夜間模式”,該軟件簡(jiǎn)單,免費(fèi),無(wú)廣告,無(wú)打擾。Android夜間模式安裝好后我們會(huì)看到軟件的圖標(biāo),7a686964616fe59b9ee7ad9431333365643464點(diǎn)擊該圖標(biāo)后,你的Android手機(jī)亮度就會(huì)暗下來(lái),再次點(diǎn)擊會(huì)恢復(fù)之前的狀態(tài),是不是很簡(jiǎn)單。Android夜間模式如果你希望使用一些高級(jí)的功能,可以下拉通知欄,找到該應(yīng)用的圖標(biāo),點(diǎn)擊進(jìn)去。進(jìn)去之后你可以做以下幾件事情:1.開(kāi)啟或者關(guān)閉Android夜間模式2.快速選擇自己喜歡的濾鏡3.自由調(diào)節(jié)屏幕的亮度4.自由設(shè)置自己喜歡的濾鏡5.開(kāi)啟或者關(guān)閉通知欄圖標(biāo)(注:關(guān)閉后可以通過(guò)雙擊應(yīng)用的圖標(biāo)再次開(kāi)啟)6.設(shè)置全局背景圖片(可以展現(xiàn)在任何應(yīng)用里面,如微信,瀏覽器)Android夜間模式Android夜間模式開(kāi)啟或者關(guān)閉Android夜間模式:上文第二步,只需點(diǎn)擊應(yīng)用圖標(biāo)即可開(kāi)啟或者關(guān)閉夜間模式,當(dāng)然你也可以在進(jìn)入應(yīng)用后自由開(kāi)啟或者關(guān)閉。方法是點(diǎn)擊這個(gè)復(fù)選框Android夜間模式快速設(shè)置自己喜歡的濾鏡:點(diǎn)擊應(yīng)用右側(cè)的“+”號(hào),可以快速設(shè)置一個(gè)自己喜歡的夜間模式顏色。Android夜間模式調(diào)節(jié)夜間模式的亮度:除了預(yù)設(shè)的亮度外,我們還可以自己調(diào)節(jié)屏幕的亮度。Android夜間模式自定義自己喜歡的夜間模式濾鏡顏色:除了預(yù)設(shè)的集中夜間模式顏色外,應(yīng)用還提供了一個(gè)可以讓用戶自定義的調(diào)色器,我們可以根據(jù)自己的喜好去自己配色。Android夜間模式開(kāi)啟或者關(guān)閉通知欄:“月食-夜間模式”考慮到一部分用戶的使用習(xí)慣,允許用戶關(guān)閉該應(yīng)用在通知欄的信息,這樣應(yīng)用就會(huì)完全浸沒(méi)在后臺(tái)運(yùn)行。我們只需要點(diǎn)擊桌面圖標(biāo),開(kāi)啟夜間模式;再次點(diǎn)擊桌面圖標(biāo),關(guān)閉夜間模式。注:如果想再次進(jìn)入應(yīng)用,可以雙擊桌面圖標(biāo),這樣通知欄再次開(kāi)啟,可以從通知欄進(jìn)入應(yīng)用。Android夜間模式設(shè)置背景圖片:“月食-夜間模式”一個(gè)非常強(qiáng)大的功能。它允許我們?cè)O(shè)置一張圖片作為任何應(yīng)用的背景。應(yīng)用內(nèi)置了3張圖片可供選擇,如果希望設(shè)置自己的圖片,可以購(gòu)買高級(jí)版本。Android夜間模式Android夜間模式Android夜間模式Android夜間模式Android夜間模式本回答被網(wǎng)友采納,三星手機(jī)本機(jī)沒(méi)有自帶此功能,可以嘗試下載第三方軟件實(shí)現(xiàn),1、同為Android手機(jī),不同牌子的,設(shè)置方法不同。2、以魅族手機(jī)為例,登錄qq后,向右劃就會(huì)出現(xiàn),工具欄,點(diǎn)擊最下面夜間模式即可。如圖:,可能是扣扣軟件的問(wèn)題,皮膚是扣扣的軟肋..本回答被提問(wèn)者采納內(nèi)容來(lái)自www.51dongshi.com請(qǐng)勿采集。