最近再研究Android应用的夜间模式,总结一下:
夜间模式的主旨就是用代码实现调用不同的.xml文件或者不同的资源文件。当然,皮肤,主题什么的都可以这么实现。
第一种:(sdk2.2+)UiModeManager
傻瓜式的,新建layout-night文件夹,里面加入需要夜间模式的layout.xml文件,然后系统会根据UiMode自动获取layout或者layout-night中的布局文件
UiModeManager是Android SDK2.2提供的一种对于手机UI控制的Manager,其中提供了进入行车(carMode)的方法,其实整个手机硬件内置了集中模式,主要是:UI_MODE_TYPE_UNDEFINED,UI_MODE_TYPE_NORMAL,UI_MODE_TYPE_DESK,UI_MODE_TYPE_CAR,UI_MODE_TYPE_TELEVISION。默认是normal的~虽然UiMode内置了夜间模式,但是只能够在CAR模式的时候运用...也就是说你要试用夜间模式,必须要将currentMode设置成UI_MODE_TYPE_CAR,具体方法如下。
UiModeManager uim = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);
int i = uim.getCurrentModeType();
if(i != Configuration.UI_MODE_TYPE_CAR){
uim.enableCarMode(0);
}
uim.setNightMode(UiModeManager.MODE_NIGHT_YES);
退出夜间模式:
uim.disableCarMode(0);//这里可传两个参数,0:只退出夜间模式,1:退出应用程序和夜间模式。
这种方法是不可取的...首先2.2+要求太高,其次和CAR模式绑定让人很难hold,知道就好,说不定以后改善好了可以用...
第二种:调用其他apk文件的资源。
这个好处就是可以将夜间模式打包让需要的用户下载,和新浪微博是一个实现方式。将一个只有资源的project A 打包成apk,这个A就是所谓的夜间模式包,用户可以下载下来,重点在本身的project B怎么调用A的资源文件。实现如下:
//获得A的contex是关键。
Context mContext = createPackageContext("com.a", Context.CONTEXT_INCLUDE_CODE|Context.CONTEXT_IGNORE_SECURITY);
Resources mResource = mContext.getResources();
Integer identifer = getResources().getIdentifier("night_background", "drawable", "com.a");
BitmapDrawable db = (BitmapDrawable)mResource.getDrawable(identifer);
拿到bitmap就一切OK了...这个只是提供个思路,如果要做夜间模式,还是写一个比较完整的体系。
其实用反射也可以完成这个动作:顺便贴一下吧:
Class aR = mContext.getClassLoader().loadClass("com.a.R" + "$" + "drawable");
String filed = "night_background";
Field file = aR.getField(filed);
Integer bpd = (Integer)file.get(aR.newInstance());
拿到integer就如上述步骤了...
分享到:
相关推荐
Android日夜间模式切换
It is an experimental project for switching day/night mode on Android. View the demo video on Youtube. This will help you understand the project. Dependencies add nightowllib library to your project ...
Android夜间模式,通过Theme实现(attrs.xml styles.xml Activity.setTheme()) 效果展示: 如何添加 Gradle添加: 1.在Project的build.gradle中添加仓库地址 allprojects { repositories { ... maven { url ...
ThemeDemo日夜间模式切换,页面切换的时候附带动画特效, 关于多主题实现的,大牛这里的做法是继承AppCompatActivity,置换了AppCompatDelegate中AppCompatViewInflater中的createView 方法.实现了对 xml 控件的控制. ...
Android原生方式实现程序夜间模式,相应文档地址: http://blog.csdn.net/qq_23383563/article/details/52493320
这是个方便切换夜间模式的库,利用官方夜间模式,同时不用重启Activity
Android WebView添加夜间模式
另一种不重启Activity 切换Android夜间模式的库
通过css注入的方式实现android webview的夜间模式。
Android夜间模式实现,通过在window上加一层半透明的View.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android 夜间模式 改变字体颜色 模式记录在本地 下次进入 显示上次设置的模式 代码简单易懂 赚点分不容易 支持下吧!
Android夜间模式
包含三个Android工程示例代码: 1. 使用降低屏幕亮度的方式实现夜间模式 2. 使用替换theme的方式实现夜间模式 3. webView实现白天/夜间模式阅读
>关于多主题实现的,我这里的做法是继承AppCompatActivity,置换了AppCompatDelegate中AppCompatViewInflater中的createView 方法.实现了对 xml 控件的控制. 实现: 实现了日夜模式的切换.(不重启 Acitivity ) 解决...
app不乏需要添加夜间模式和日间模式的皮肤,本demo采用Android官方在Support Library 23.2.0中已经加入了夜间主题
一个酷炫的日间夜间模式切换按钮,于是就动手写了仿写了一个安卓版本的。
CNode 社区第三方 Android 客户端,原生 App,Material Design 风格,支持夜间模式。
android 日间、夜间模式切换;
通过自定义主题进行夜间模式的核心demo 重启设置及其设置页面以前的activity
[安卓开源]带夜间模式的浏览器项目.zip