android studio夜间模式,android studio怎样实现夜间模式
满意答案
noxlqub
2016.05.01
采纳率:51% 等级:7
已帮助:210人
关于阅读类的app,有个夜间模式真是太重要了。
那么有两种方式可以实现夜间模式
1:修改theme,重启activity
优点:正儿八经的夜间模式,配色看着舒服
缺点:图片刺眼、闪屏
2:使用一个带黑色带透明度的View,盖在现有的activity上,效果类似你带上墨镜,看着太阳不刺眼。
优点:不用重启activity,不闪屏;加上透明度过渡动画,模式之间切换非常舒服,解决了1中,白底图片依旧刺眼的问题。;
缺点:配色没变化,就算带上墨镜,白天依旧是白天。
因此,本方案整合了两种解决方案。在夜间配色的基础上,再加上一层墨镜,让图片也变得柔和起来,效果图如下:
可以看待chrome图标的白色底,在夜间模式下也变得柔和了
好,下面来讲讲具体的实现步骤,本环节使用的开发环境是android Studio
1 首先,在values下要准备好三个文件,没有就自己创建
attrs.xml(声明属性的类型,布局xml中用) reference可以使用系统的资源ID,比如R.color.gray; color可以直接使用#ffffff颜色代码
colors.xml(调色板,集中管理颜色hex)遵循 优秀格式规范 ,即调色板模式,避免使用btn1,btn2,fontTitle,fontText之类的颜色名。
#fafafa
#f3f3f3
#cccccc
#777
#383838
#8e9ea4
#34515c
#1e3e4a
#90000000
styles.xml(日间、夜间主题)
@color/white_dark
@color/gray_dark
@color/gray
@drawable/navigator_list_item_day
@drawable/list_item_day
@color/green_dark
@color/white_dark
@color/green_light
@drawable/navigator_list_item_night
@drawable/list_item_night
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;
@Override
protected void onCreate(Bundle savedInstanceState) {
mBaseApp = (BaseApplication) getApplication();
if (mBaseApp.isNightMode())
setTheme(R.style.AppTheme_night);
else
setTheme(R.style.AppTheme_day);
super.onCreate(savedInstanceState);
mIsAddedView = false;
if (mBaseApp.isNightMode()) {
initNightView();
mNightView.setBackgroundResource(R.color.night_mask);
}
}
@Override
protected 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();
else
ChangeToNight();
recreate();
}
OK,如过你能坚持看到这里,说明阁下是有耐心的人,奉上一个彩蛋。
关于WebView网页如何实现日间、夜间模式。
这个问题比我们现象的要简单的多。因为网页么,在生成html内容时,只要根据日间、还是夜间模式,替换css路径为日间.css、夜间.css就好了。
栗子来了,瞧,就是这个"{style}",我们要替换的对象。
Cnblogs
在对webview加载内容文本时,替换该字符串的css
replace("{style}",baseApplication.isNightMode() ? "style_night.css" : "style_day.css")
结构如下:
好了,大概思路,步骤代码都已经给出了,各位可以轻松给自己的app加上夜间模式
00分享举报
android studio夜间模式,android studio怎样实现夜间模式相关推荐
- android studio 实用指南,《Android Studio实用指南》4.27 使用演示模式(示例代码)
本文节选自<Android Studio实用指南> 第4章第27节 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. 什么是演 ...
- 基于Android studio设计的APP通过esp8266在AP模式下控制STM32单片机LED灯
一.单片机硬件:mini板f103rct6. 显示屏TFT2.8寸.wifi模块esp8266(正点原子旗舰店购买) 关键代码: 模块AT指令配置进入ap模式: 相应的指令执行: 软件Android ...
- android studio云测,Android studio 下的robotium自动化测试和持续集成
[背景介绍] Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开 ...
- android studio管理依赖,Android Studio 中的 Gradle 依赖统一管理
在我们的实际项目开发中,通常在一个 Project 项目中会存在多个 Module 的情况,在这些 Module 中会存在一些相同的版本依赖配置,针对进行版本升级的时候需要逐个修改,显得特别麻烦,所以 ...
- android studio 跨进程,Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用...
本文首发于微信公众号「后厂技术官」 在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messeng ...
- android studio抛出,Android Studio中新的项目不能运行,抛出错误(Android Studio new pr
刚才我已经安装,并开始在Android Studio中工作,并配置我需要开始上项目的工作一切之后创建的新项目. 在新创建的项目,我没有改变任何东西,然后试图运行项目. 但它不工作,抛出一些相关性错误, ...
- android studio(1)---探索Android Studio
探索 Android Studio Android Studio 是基于 IntelliJ IDEA 的官方 Android 应用开发集成开发环境 (IDE). 除了 IntelliJ 强大的代码编辑 ...
- Ubuntu(Deepin)搭建Android开发环境(Android Studio)
前言: 最近项目完成得差不多了,有些空闲于是装了基于ubuntu的Deepin玩玩,感觉挺好的,于是尝试用它来作为开发的系统,接下来就是要搭建android的开发环境,但是看了好多都是很老的,IDE是 ...
- Visual Studio中的Android模拟器使用详解
关注微信号:javalearns 随时随地学Java 或扫一扫 随时随地学Java Microsoft 本周发布了 Visual Studio 2015 预览版, 里面包含 Android 开发工 ...
- android studio评论功能,Android Studio 使用技巧
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 作为一名 Android 开发者,使用 Android Studio 作为 IDE 进行开发已经成为标配,本文就把 AS ...
最新文章
- SQL Server 2014图文安装教程
- vim设置显示行号,vim跳转到文件头,文件尾
- 光栅衍射主极大个数_大学物理——光的干涉和衍射(二)
- c++输入了后边不继续_医疗:连涨多日,后边还能加仓吗?直接说答案!
- c# 对COM+对象反射调用时地址参数处理 c# 对COM+对象反射调用时地址参数处理
- 【计算机视觉】opencv姿态解算6 理论算法调研 PNP问题 5种算法
- vt linux tty中文,Linux输入子系统和tty关系影述
- c 语言 初始化数组,C CodeBase:初始化一个数组
- ADSL拨号网络环境下实时视频广播的完美实现
- python读取cad_SmartSoft中用C#.Net实现AutoCAD块属性提取|python基础教程|python入门|python教程...
- 基于HTML5实现五彩连珠小游戏
- 基于Verilog HDL的数字秒表
- Python实现图像的椒盐噪声添加和基础的平滑处理(均值滤波与中值滤波)
- 手机怎么把几个PDF文件合并到一起?教你一分钟搞定
- 别让猴子跳回背上——观书感
- Hulu推荐 | 五年口碑依旧百分百好评?《汉密尔顿》上线Disney+
- Apahce虚拟主机与伪静态
- 【雷达通信】相控阵天气雷达探测晴空回波能力分析Matlab源码
- 多路复用之——epoll
- 仓库温度湿度控制措施_仓库温湿度管理规定_仓库温湿度监测管理制度