夜間模式的實現

2021-07-27 14:20:19 字數 2166 閱讀 8745

網上很多文章都講解了好幾種方案,不過總會有這樣那樣的問題,如車載模式之類的,有些有閃爍現象。所以這裡我就用了下最麻煩的那種方案,通過定義attrs來實現的。

在網上看到了乙個大神寫好的類,我也是直接拿過來用了

這裡面首先寫好介面,然後根據介面的控制項來定義attrs

<?xml version="1.0" encoding="utf-8"?>

name="btn_bg"

format="color|reference"/>

name="ui_background"

format="color|reference"/>

resources>

網上很多講解都說要再布局檔案中寫background=」?attr/ui_background」,這樣寫確實很麻煩,很多布局都這樣寫應該很坑了吧。其實不用寫,直接在**裡設定就行了。唯一麻煩的就是每個activity裡面都有進行夜間模式的切換。

theme

值得注意的是,這個**要在values,values-v21裡的styles都寫一遍,不然只能適配21以下或21以上之中的一種。

name="colorprimary">@color/colorprimaryitem>

name="colorprimarydark">@color/colorprimarydarkitem>

name="coloraccent">@color/coloraccentitem>

name="btn_bg">@drawable/shape_bg_buttonitem>

name="ui_background">@color/whiteitem>

--夜間主題-->

name="colorprimary">@color/colorprimarynightitem>

name="colorprimarydark">@color/colorprimarydarknightitem>

name="coloraccent">@color/coloraccentnightitem>

name="btn_bg">@drawable/shape_bg_button_nightitem>

name="ui_background">@color/greyitem>

**實現

重要的地方都已經標註出來了

else
setcontentview(r.layout.activity_main);

mtext = (textview) findviewbyid(r.id.tv);

mcontainer = (linearlayout) findviewbyid(r.id.activity_main);

m******* = (*******) findviewbyid(r.id.tool_bar);

m*******.settitle("");

setsupportactionbar(m*******);

mswitch = (button) findviewbyid(r.id.btn_switch);

mswitch.setonclicklistener(this);

if (mdaynighthelper.isday()) else

/*** 初始化的時候也要切換模式

*/switchmode();

}核心**

切換的時候直接呼叫這兩個方法就行了
不要忘記修改狀態列

/**
* 修改主題

*/private

void

changetheme() else

}/**

* 修改介面顏色

*/private

void

switchmode()

/*** switch statusbar

*/private

void

switchstatusbar()

}

android夜間模式實現

我們來 一下夜間模式。問 android夜間模式的實現有幾種?答 有好多種。怎麼用這個方法呢?接下來怎麼去自定義自己的日夜間模式呢?方法與之前的nightmodehelper類似,建立帶 night字尾的資料夾 比如 values night 然後新增你的資源檔案,資源檔案需要相同的命名 比如 co...

Android實現夜間模式切換功能

除錯後進行下一步 colorprimary color colorprimary item colorprimarydark color colorprimarydark item coloraccent color coloraccent item style mainbackground for...

iOS 夜間模式

講解 1.因為夜間模式是所有頁面都要更改,所以將通知的新增與移除放到 baseviewcontroller中 2.每個類有都需要單獨設定自己的夜間情況,所以在 baseviewcontroller中有兩個公共介面 3.因為大部分夜間設定是通用的,所以封裝出 nightmanager類進行統一設定 4...