read阅读微信怎么切换夜间模式黑白天模式OPPO手机软件read阅读在阅读页面,夜间模式切换不到白天模式

 |  |  | 
您所在的位置: &
> 咕咚运动切换夜间模式方法
咕咚运动切换夜间模式方法
21:16:19  来源:互联网   次阅读
咕咚运动切换夜间模式方法。夜间模式就是在运动的时候,屏幕以灰黑色为背景色,这样可以减少小伙伴在夜晚使用手机对眼部的刺眼程度。接下来小编就教大家咕咚运动切换夜间模式方法。
  1)打开咕咚运动进入应用默认【运动】页面,接着点击右上角【齿轮】图标。点击【夜间模式】致【绿色】。(如下图)
  2)返回点击【开始运动】小伙伴就可以看到夜间模式是这样子的啦!(如下图)
全国首款GPS运动激励软件追踪你的运动路线,实时监测运动数据,提升你的运动能力!还为自己的身材烦恼?还…
更新时间:  运行环境:Android/
共有人发表了观点,请选择你的观点:
大家都在看
网友在7小时点赞了
网友在8小时点赞了
网友在8小时点赞了
网友在8小时点赞了
网友在9小时点赞了android 实现【夜晚模式】的另外一种思路
原文出处:源码地址在一切开始之前,我只想用正当的方式,跪求各位的一个star&预览
序在写SegmentFault for Android 4.0的过程中,因为原先采用的夜间模式,代码着实不好看,于是我又开始挖坑了。在几个月前更新的Android Support Library 23.2中,让我们认识到了DayNight Theme。一看源码,原来以前在API 8的时候就已经有了night相关的资源可以设置,只是之前一直不知道怎么使用,后来发现原来还是利用了AssetManager相关的API ―― Android在指定条件下加载指定文件夹中的资源。 这正是我想要的! 这样我们只用指定好引用的资源,(比如@color/colorPrimary) 那么我就可以在白天加载values/color.xml中的资源,晚上加载values-night/color.xml中的资源。v7已经帮我们完成了这里的功能,放置夜晚资源的问题也已经解决了,可是每次切换DayNight模式的时候,需要重启下Activity,这件事情很让人讨厌,原因就是因为重启后,我们的Context就会重新创建,View也会重新创建,根据当前系统(应用)配置的不同,加载不同的资源。&那我们有没有可能做到不重启Activity来实现夜间模式呢?其实实现方案很简单:我们只用记录好系统渲染xml的时候,当时给View的资源id,在特定时刻,重新加载这些资源,然后设置给View即可。接下去我们碰到两个问题:在引入这个库的情况下,让开发者少改已有的xml文件,把所有的布局都换为我们指定的布局。API要尽量简单,清楚,明白。上面两个条件说起来很容易,其实想实现并不是很容易的,还好AppCompat给了我一些思路。来自AppCompat的启发当我们引入appcompat-v7,有了AppCompatActivity的时候,我们发现我们渲染的TextView/Button等组件分别变成了AppCompatTextView和AppCompatButton, 这些组件都是包含在v7包中的,很早以前觉得很神奇,当看了AppCompatActivity和AppCompatDelegate的源码,知道了LayoutInflator.Factory这些东西的工作原理之后,这一切也就不神奇了 ―― 它只是在inflate的过程中,注入了自己的代码进去,比如把TextView解析成AppCompatTextView类,达到对解析结果拦截的目的。OK,借助这个方法,我们可以在Activity.onCreate中,注入我们自己的LayoutInflatorFactory:像这样,有兴趣的同学可以看看AppCompatDelegateImplV7这个类的installViewFactory方法的实现。接下去我们的目的是把TextView、Button等类换成我们自己的实现――SkinnableTextView和SkinnableButton。可以翻到AppCompatViewInflater这个类的源码,其实很清晰了: public final View createView(View parent, final String name, @NonNull Context context,
@NonNull AttributeSet attrs, boolean inheritContext,
boolean readAndroidTheme, boolean readAppTheme, boolean wrapContext) {
final Context originalContext =
if (inheritContext && parent != null) {
context = parent.getContext();
if (readAndroidTheme || readAppTheme) {
context = themifyContext(context, attrs, readAndroidTheme, readAppTheme);
if (wrapContext) {
context = TintContextWrapper.wrap(context);
View view = null;
switch (name) {
case "TextView":
view = new AppCompatTextView(context, attrs);
case "ImageView":
view = new AppCompatImageView(context, attrs);
case "Button":
view = new AppCompatButton(context, attrs);
case "EditText":
view = new AppCompatEditText(context, attrs);
case "Spinner":
view = new AppCompatSpinner(context, attrs);
case "ImageButton":
view = new AppCompatImageButton(context, attrs);
case "CheckBox":
view = new AppCompatCheckBox(context, attrs);
case "RadioButton":
view = new AppCompatRadioButton(context, attrs);
case "CheckedTextView":
view = new AppCompatCheckedTextView(context, attrs);
case "AutoCompleteTextView":
view = new AppCompatAutoCompleteTextView(context, attrs);
case "MultiAutoCompleteTextView":
view = new AppCompatMultiAutoCompleteTextView(context, attrs);
case "RatingBar":
view = new AppCompatRatingBar(context, attrs);
case "SeekBar":
view = new AppCompatSeekBar(context, attrs);
if (view == null && originalContext != context) {
view = createViewFromTag(context, name, attrs);
if (view != null) {
checkOnClickListener(view, attrs);
}这里完成的工作就是把XML中的一些Tag解析为java的类实例,我们可以依样画葫芦,只不过把其中的AppCompatTextView换成SkinnableTextView
switch (name) {
case "TextView":
view = new SkinnableTextView(context, attrs);
好了,如果有需要,我们在库中把所有的类都替换成自己的实现,就能达到目的了,使得那些使用原始控件的开发者,不修改一丝一毫的代码,渲染出我们定制的控件。应用DayNightMode上一节我们解决了自定义View替换原始View的问题,那么接下去怎么办呢?这里我们同样也参考AppCompat关于BackgroundTint的一些设计方式。首先我们可以看到AppComatTextView的声明:public class AppCompatTextView extends TextView implements TintableBackgroundView {
}实现了一个TintableBackgroundView的接口,而我们使用ViewCompat.setSupportBackgroundTint的时候,可以找到这么一条:static void setBackgroundTintList(View view, ColorStateList tintList) {
if (view instanceof TintableBackgroundView) {
((TintableBackgroundView) view).setSupportBackgroundTintList(tintList);
}利用OO的特性,很轻松的判断这个View是否支持我们想要的特性,这时候我也声明了一个接口Skinnablepublic class SkinnableTextView extends AppCompatTextView implements Skinnable {
}这样等于给我的类打了一个标记,外部调用的时候,就可以判断这个View是否实现了我们的接口,如果实现了接口,就可以调用相关的函数。我们在Activity的基类中,可以如此调用private void applyDayNightForView(View view) {
if (view instanceof Skinnable) {
Skinnable skinnable = (Skinnable)
if (skinnable.isSkinnable()) {
skinnable.applyDayNight();
if (view instanceof ViewGroup) {
ViewGroup parent = (ViewGroup)
int childCount = parent.getChildCount();
for (int i = 0; i & childC i++) {
applyDayNightForView(parent.getChildAt(i));
}利用递归的方式,把所有实现Skinnable接口的View全部应用了applyDayNight方法。 因此开发者使用的时候,只用把Activity的继承改为SkinnableActivity,然后在恰当的时机调用setDayNightMode即可。Skinnable在View中具体实现这节讲的是如何解决我们的痛点 ―― 不重启Activity应用DayNight mode。那我们的View实现Skinnable接口中的方法,到底是如何工作的呢,以SkinnableTextView为例子。一般我们对TextView应用的样式有background和textColor,额外的情况下带一个backgroundTint都是OK的。首先我们的大前提是,这些资源在xml中是用引用的方式传进来的,什么意思呢,看下面的表格对错android:textColor="@color/primaryColor"android:textColor="#fff"android:textColor="?attr/colorPrimary"android:textColor="#000"总结起来一句话,就是不应该是绝对值,如果是绝对值的话,我们去改它的值也不符合逻辑。那么如果是资源引用的方式的话,我们使用TypedArray这个对象,是可以获取到我们引用的资源的id的,也就是R.color.primaryColor的具体数值。 我们把这个值保存下来,然后在恰当的时候,利用这个值再去变化后的Context中获取一遍指定的颜色ContextCompat.getColor(context, R.color.primaryColor);这时候我们获取到的实际值,context就会根据系统的配置去正确的文件夹下找我们想要的资源了。我们利用TypedArray能获取到资源的id,使用TypedArray.getResourceId方法即可,传入属性的索引值就行。public void storeAttributeResource(TypedArray a, int[] styleable) {
int size = a.getIndexCount();
for (int index = 0; index & index ++) {
int resourceId = a.getResourceId(index, -1);
int key = styleable[index];
if (resourceId != -1) {
mResourceMap.put(key, resourceId);
}最后,在切换夜间模式的时候,我们调用了applyDayNight方法,具体代码如下:@Override
public void applyDayNight() {
Context context = getContext();
key = R.styleable.SkinnableView[R.styleable.SkinnableView_android_background];
Integer backgroundResource = mAttrsHelper.getAttributeResource(key);
if (backgroundResource != null) {
Drawable background = ContextCompat.getDrawable(context, backgroundResource);
setBackgroundDrawable(background);
}总结以及缺陷经过以上几点的开发,我们使用日/夜模式切换就变得非常容易了,比如我们如果只处理颜色的修改的话,只用在values/colors.xml和values-night/colors.xml配置好指定颜色在不同模式下的表现形式,再调用setDayNightMode方法,就可以完成一键切换,不需要在xml中添加任何复杂凌乱的东西。因为在配置上节省了许多代码,那我们的约定就变得比较冗长了,如果想进行自定义View的换肤的话,就需要手动去实现Skinnable接口,实现applyDayNight方法,开发者这时候就需要去做一些缓存资源id的操作。同时因为它依赖于AppCompat DayNight Mode,它只能作用于日/夜间模式的切换,要想实现换肤功能,是做不到的。这两点是缺陷,同时也是和市面上其他换肤库最不同的地方。但是我们把肮脏的代码隐藏在顶部实现里,就是为了业务逻辑层代码的干净和整洁。希望各位会喜欢,然后有问题可以留言或者在github上给我提PR,非常感谢。Github Repo 地址:
上一篇: 随着 下一个安卓版本 进入最后阶段,我们将发布Android N的第四个开发者预览版以及Android N 最终SDK。而且多亏大家在前三个版本的的不断反馈,现在所有的API也都是最终版的了。如果你已经在Android Beta工程( /bet )上登记了你的设备,你将很
下一篇: 背景图片跟随手势滑动的ViewPager,可各方向滑动或点击切换页面。 原效果参考 ANA Portuguese Airports (google play地址) 效果图 组成 项目由一个Activity和五个fragment组成。 主要代码介绍 1、横向背景移动的ViewPager中,重写dispatchDraw方法: @Overr爱手机-最新的手机新闻、最酷的手机软件、超帅的手机技巧、最好的手机导购评测和最热的手机配件产品介绍全在爱手机.
王宝强老婆出轨最新内幕!真相竟是......
[推广]●●●●●●●●●●●
热门公众号Accounts
精彩内容热门推荐
yq-university
专注于创新研究的专业教育机构
啪啪啪! 两性话题,两性知识,荤段子、教育视频,么么哒,想了解秘密进来嘛!小编提醒观众自带纸巾,欢淫进入!
传递有价值的信息!
?女人?的天堂,男人禁止入内...
汇聚六安各类信息,打造生活便捷平台.
郑重承诺:只发精品,拒绝糟粕低俗色情!
?永丰?国际打造国内最专业、最高效的境外自由行定制咨询服务;商务考察团,各国签证等咨询服务;以及新加坡、日本、韩国劳务派遣、留学咨询服务.地址:山东威海市文登区米山路84-15号电话: 8260678
安溪龙门最具影响力公众号.咱厝人学习交流平台.
?太康?人自己的公众平台,人才求职、企业招聘、天气预报、房产信息、本地信息等
wei-rongxian
微容县时代,为容县商家提供微平台服务~
这肯定是?丰泽?最值得关注的公众号!
iOS 9中Safari阅读视图夜间模式开启方法
阅读&41055&发表& 18:11:32
虽然iOS 9要等到今年秋季才正式向广大用户推送,但其公测版已经备受用户欢迎。除了修复了iOS 8中存在的重大漏洞 ,还创造性地带来了全新的用户体验,这其中就包括Safari阅读视图支持夜间模式。那么如何在iOS 9的设备中开启Safari的夜间模式呢?今天爱手机小编专门为大家分享一下开启方法,希望能够对大家有所帮助。爱眼,从夜间模式开始。1. 打开你要在 Safari 浏览器中阅读的文章。2. 如果该网页支持阅读视图模式,那么在 Safari 地址栏左侧会显示一个多条横线的按钮,点击该按钮。3. 然后就进入到了 Safari 的阅读视图模式 (阅读视图模式简化了网页、隐藏了不必要显示的内容,例如广告、侧边栏项目等)。4. 在地址栏右侧你会看到一个“AA”按钮,点击该按钮后会呈现很多选项(如下图),选择黑色圆圈即可进入夜间模式。除了可以选择背景颜色之外,你还可以选择不同的字体以及字体颜色。如此人性化的设计,相信iOS 9正式版推出之后,将会受到更多用户的喜爱和欢迎。
评论Comments
微信公众号小米3手机附带的多看阅读,设置成了夜间模式,阅读时屏幕是黑的,很费眼,如何更换成白天模式?_百度知道
小米3手机附带的多看阅读,设置成了夜间模式,阅读时屏幕是黑的,很费眼,如何更换成白天模式?
随意打开一本书,点击屏幕中央调出阅读菜单,点击右下方“夜间模式”切换下就好了
其他类似问题
为您推荐:
其他2条回答
嗨!在该应用的设置里面可以切换到日间模式的。
再设置里找
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 oppor9plus夜间 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信