NightModel
a night model lib for easy change app's night theme.
Install / Use
/learn @achenglike/NightModelREADME
NightModel 
a night model lib for easy change app's night theme. Based on official night model and need't restart Activity.
Thanks!
require
- support appcompat 23.2.0 or above
- activity extends AppCompatActivity
- follow Android official nigh model guidance
import
- Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- Add the dependency
dependencies {
compile 'com.github.achenglike:NightModel:x.x'
}
use
-
set NightModel in Application
public class AppApplication extends Application { @Override public void onCreate() { super.onCreate(); NightModelManager.getInstance().init(this); ... } } -
attach and detach in Activity which need refresh, not every Activity
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // must before super.onCreate NightModelManager.getInstance().attach(this); super.onCreate(savedInstanceState); } ... @Override protected void onDestroy() { NightModelManager.getInstance().detach(this); super.onDestroy(); } } -
for stop Activity restart, we need config configChanges="uiMode" in Androidmanifest.xml
<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="uiMode" android:theme="@style/AppTheme.NoActionBar"> </activity> -
call night/day method
private void changeNightModel() { if (NightModelManager.getInstance().isCurrentNightModel(this)) { NightModelManager.getInstance().applyDayModel(this); } else { NightModelManager.getInstance().applyNightModel(this); } }
warn
-
this lib used for resolving the problem that official night model can not refresh started Activities. So, only attach and detach in Activities that need refresh. It's a supplementary lib for official night model.
-
When create View dynamically in attached Activity with code, you should write like this:
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_layout, parentView, false);because the lib need cache this View, use LayoutInflater.from(MainActivity.this) will use the proxy LayoutInflaterFactory create this View and cache it
-
style:@style/xx just support TextView (android:textColor or android:textSize) now
-
this lib version 2.1 and before support version 26 and below 26.
-
this lib version 2.2 and later only support android support lib version 26 and later.
-
if we set a selector as background for View, night mode not work.
Related Skills
node-connect
349.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
