關閉→
當前位置:知科普>IT科技>android夜間模式如何設置

android夜間模式如何設置

知科普 人氣:7.78K

關於閲讀類的app,有個夜間模式真是太重要了。那麼有兩種方式可以實現夜間模式1:修改theme,重啟activity優點:正兒八經的夜間模式,配色看着舒服缺點:圖片刺眼、閃屏2:使用一個帶黑色帶透明度的View,蓋在現有的activity上,效果類似你帶上墨鏡,看着太陽不刺眼。優點:不用重啟activity,不閃屏;加上透明度過渡動畫,模式之間切換非常舒服,解決了1中,白底e79fa5e98193e58685e5aeb931333361323561圖片依舊刺眼的問題。;缺點:配色沒變化,就算帶上墨鏡,白天依舊是白天。因此,本方案整合了兩種解決方案。在夜間配色的基礎上,再加上一層墨鏡,讓圖片也變得柔和起來,效果圖如下:可以看待chrome圖標的白色底,在夜間模式下也變得柔和了好,下面來講講具體的實現步驟,本環節使用的開發環境是android Studio1 首先,在values下要準備好三個文件,沒有就自己創建attrs.xml(聲明屬性的類型,佈局xml中用) reference可以使用系統的資源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)遵循 優秀格式規範 ,即調色板模式,避免使用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框架的一個系統組件,當android程序啟動時系統會創建一個 application對象,用來存儲系統的一些信息。通常我們是不需要指定一個Application的,這時系統會自動幫我們創建,如果需要創建自己 的Application,也很簡單創建一個類繼承 Application並在manifest的application標籤中進行註冊(只需要給Application標籤增加個name屬性把自己的 Application的名字定入即可)。android系統會為每個程序運行時創建一個Application類的對象且僅創建一個,所以Application可以説是單例 (singleton)模式的一個類.且application對象的生命周期是整個程序中最長的,它的生命週期就等於這個程序的生命週期。因為它是全局 的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以通過Application來進行一些,數據傳遞,數據共享 等,數據緩存等操作。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()函數,因為是從Resume裏面重建activity的(避免閃屏)此時, 直接調用系統的recreate函數時,會報錯,原因是resume還沒執行完,就被recreate了,因此,我們函數需要延時一會,等待系統完成resume就好了。一般延時1毫秒就可以了,但是我的app裏面用到抽屜式導航欄,保存的時間要長點。準備工作到這裏已經結束了。只要activity集成自該父類,就會自動託管日間、夜間模式了3調用方式子類只要調用ChangeToDay、ChangeToNight就可以完成模式的切換了。別忘了recreate activity來生效哦,實例代碼如下:void changeViewMode() {boolean isNight = getMyApplication().isNightMode();if (isNight)ChangeToDay();elseChangeToNight();recreate();}OK,如過你能堅持看到這裏,説明閣下是有耐心的人,奉上一個彩蛋。關於WebView網頁如何實現日間、夜間模式。這個問題比我們現象的要簡單的多。因為網頁麼,在生成html內容時,只要根據日間、還是夜間模式,替換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裏提供接口,對所有支持夜間模式的應用進行統一調度。打開總開關,默認7a64e58685e5aeb931333339666662開啟其他第三方應用的夜間模式。然後也設置一個規則,可忽略某個軟件。再自動化一些,可以設置個時間段,即默認開啟夜間模式的時間段。這個Feature的實現必然要第三方開發者支持。雖然有時候夜間模式看起來可有可無,但是對於喜歡睡前玩一下手機的人來説,也是個挺人性化的功能呢。當然目前Android API還沒有這個,不過我們還是可以在自己應用中給用户接口,讓用户選擇夜間模式,或者設置個時間段觸發該功能。寫了個小Demo,簡單了實現了切換夜間模式,總結一下:在工程目錄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. [email protected] 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 {[email protected] 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);這句後面,要重新綁定各組件及其,不然只能監聽一次。這是因為在setContentView後,組件不是之前那個組件了,快捷百鍵(Ctrl+Alt+S)或度File——>Settings,打開問Settings界面“Appearance & Behavior——>Appearance”右答邊欄UI Options,在Theme選項中回選擇“答Darcula”即可本回答被提問者採納www.51dongshi.com防採集。

手機自帶

現在安卓手機基本都自帶夜間模式,有的叫做深色模式。

手機百度取消夜間模式,具體操作步驟如下:1、在手機應用中,打開手機百度,進入到手機百度的主界面,點

進入手機設置,點擊顯示和亮度。

android夜間模式如何設置

安卓7.0開啟夜間模式介紹:  Android 7.0正式版已經發布,然而此前在開發者預覽版

看到有個深色模式,勾選上。

android夜間模式如何設置 第2張

1、打開手機界面,找到手機上的設置選項,點擊進入設置頁面。2、打開設置界面後,找到界面中的“顯示

勾選上之後都變成夜間深色了,不管打開什麼軟件或者網頁,都是夜間模式。

android夜間模式如何設置 第3張
android夜間模式如何設置 第4張

三更半夜不睡覺,躲在被窩裏玩手機。相信這樣的事情絕對不止我一個人幹過,未來也依然會有無數人這麼幹下去

還可以自主調整亮度,色彩和護眼等。

android夜間模式如何設置 第5張

關於閲讀類的app,有個夜間模式真是太重要了。那麼有兩種方式可以實現夜間模式1:修改

色彩與護眼裏可以勾選自然色彩顯示,這樣會根據不同環境自主調節。還可以設置色彩調節與色温,還有護眼模式的開啟等。

為了方便我們實現Android夜間模式,我們下載一個軟件“月食-夜間模式”,該軟件簡單,免費,無廣告

色彩調節與色温就根據個人喜歡的顏色選擇好即可。護眼模式可以設置開啟時間等,設定好了到時就自動啟動了,非常方便。

android夜間模式如何設置 第6張
android夜間模式如何設置 第7張

1、同為Android手機,不同牌子的,設置方法不同。2、以魅族手機為例,登錄qq後,向右劃就會出

第三方設置

如果不想用手機自帶,非要用第三方的也可以,去商城搜索夜間,會有很多夜間模式的軟件,下載一個。

原理很簡單:利用setTheme調用不同的風格,而白天與黑夜的區別就是在於夜間模式直接利用黑色背景,

打開這種軟件,一般第三方的夜間模式軟件裏也可以直接在屏幕上調節屏幕亮度。

android夜間模式如何設置 第8張

原理很簡單:利用setTheme調用不同的風格,而白天與黑夜的區別就是在於夜間模式直接利用黑色背景,

還有幾種顏色可以選擇,其實並沒有手機自帶的多。

android夜間模式如何設置 第9張

手機百度取消夜間模式,具體操作步驟如下:1、在手機應用中,打開手機百度,進入到手機百度的主界面,點

另外會提供一些提醒,比如用眼時間,用眼報告等,這些功能看個人喜好,如果覺得有用可以用這些第三方的。缺點就是需要佔用內存來安裝。

android夜間模式如何設置 第10張

安卓7.0開啟夜間模式介紹:  Android 7.0正式版已經發布,然而此前在開發者預覽版

為了方便我們實現Android夜間模式,我們下載一個軟件“月食-夜間模式”,該軟件簡單,免費,無廣告,無打擾。Android夜間模式安裝好後我們會看到軟件的圖標,7a686964616fe59b9ee7ad9431333365643464點擊該圖標後,你的Android手機亮度就會暗下來,再次點擊會恢復之前的狀態,是不是很簡單。Android夜間模式如果你希望使用一些高級的功能,可以下拉通知欄,找到該應用的圖標,點擊進去。進去之後你可以做以下幾件事情:1.開啟或者關閉Android夜間模式2.快速選擇自己喜歡的濾鏡3.自由調節屏幕的亮度4.自由設置自己喜歡的濾鏡5.開啟或者關閉通知欄圖標(注:關閉後可以通過雙擊應用的圖標再次開啟)6.設置全局背景圖片(可以展現在任何應用裏面,如微信,瀏覽器)Android夜間模式Android夜間模式開啟或者關閉Android夜間模式:上文第二步,只需點擊應用圖標即可開啟或者關閉夜間模式,當然你也可以在進入應用後自由開啟或者關閉。方法是點擊這個複選框Android夜間模式快速設置自己喜歡的濾鏡:點擊應用右側的“+”號,可以快速設置一個自己喜歡的夜間模式顏色。Android夜間模式調節夜間模式的亮度:除了預設的亮度外,我們還可以自己調節屏幕的亮度。Android夜間模式自定義自己喜歡的夜間模式濾鏡顏色:除了預設的集中夜間模式顏色外,應用還提供了一個可以讓用户自定義的調色器,我們可以根據自己的喜好去自己配色。Android夜間模式開啟或者關閉通知欄:“月食-夜間模式”考慮到一部分用户的使用習慣,允許用户關閉該應用在通知欄的信息,這樣應用就會完全浸沒在後台運行。我們只需要點擊桌面圖標,開啟夜間模式;再次點擊桌面圖標,關閉夜間模式。注:如果想再次進入應用,可以雙擊桌面圖標,這樣通知欄再次開啟,可以從通知欄進入應用。Android夜間模式設置背景圖片:“月食-夜間模式”一個非常強大的功能。它允許我們設置一張圖片作為任何應用的背景。應用內置了3張圖片可供選擇,如果希望設置自己的圖片,可以購買高級版本。Android夜間模式Android夜間模式Android夜間模式Android夜間模式Android夜間模式本回答被網友採納,三星手機本機沒有自帶此功能,可以嘗試下載第三方軟件實現,1、同為Android手機,不同牌子的,設置方法不同。2、以魅族手機為例,登錄qq後,向右劃就會出現,工具欄,點擊最下面夜間模式即可。如圖:,可能是扣扣軟件的問題,皮膚是扣扣的軟肋..本回答被提問者採納內容來自www.51dongshi.com請勿採集。

TAG標籤:#模式 #android #夜間 #設置 #