当前位置:懂科普 >

IT科技

> android夜间模式如何设置

android夜间模式如何设置

关于阅读类的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请勿采集。

  • 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/itkeji/7w8kr.html