三行Android代码实现白天夜间模式流畅切换_Android

Usage xml android:background= ?attr/zzbackground app:backgroundAttr= zzbackground //如果当前页面要立即刷新,这里传入属性名称 比如R.attr.zzbackground 传zzbackground即可 android:textColor= ?attr/zztextColor app:textColorAttr= zztextColor // 

演示效果

 

Usage xml    

android:background="?attr/zzbackground"
 app:backgroundAttr="zzbackground"//如果当前页面要立即刷新,这里传入属性名称 比如R.attr.zzbackground 传zzbackground即可
 android:textColor="?attr/zztextColor"
 app:textColorAttr="zztextColor"//如需立即刷新页面效果 同上

java

 @Override
 protected void onCreate(Bundle savedInstanceState) {
   // 在要立即切换效果的页面调用此方法
   ChangeModeController.getInstance().init(this,R.attr.class).setTheme(this, R.style.DayTheme, R.style.NightTheme);
   //在其他页面调用此方法
   //ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme);
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  //添加额外view至夜间管理
  // ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary);
  //ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent);
  // ChangeModeController.getInstance().addTextColor(view,R.attr.colorAccent);

  // 设置切换
  //ChangeModeController.changeDay(this, R.style.DayTheme);
  //ChangeModeController.changeNight(this, R.style.NightTheme);
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();
  // 在onDestroy调用
  ChangeModeController.onDestory();
 } 

详细操作描述

第一步:自定义属性

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="zzbackground" format="color|reference"/>
    <attr name="zzbackgroundDrawable" format="reference"/>
    <attr name="zztextColor" format="color"/>
    <attr name="zzItemBackground" format="color"/>
</resources>

 第二步:配置夜间style文件 

<resources>

 <!-- Base application theme. -->
 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <!-- Customize your theme here. -->
  <item name="colorPrimary">@color/colorPrimary</item>
  <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  <item name="colorAccent">@color/colorAccent</item>
  <item name="windowActionBar">false</item>
  <item name="android:windowNoTitle">true</item>
  <item name="windowNoTitle">true</item>
 </style>

 <!--日间模式 -->
 <style name="DayTheme" parent="AppTheme">
  <item name="zzbackground">@color/dayBackground</item>
  <item name="zzbackgroundDrawable">@drawable/ic_launcher</item>
  <item name="zztextColor">@color/dayTextColor</item>
  <item name="zzItemBackground">@color/dayItemBackground</item>
 </style>

 <!--夜间模式 -->
 <style name="NightTheme" parent="AppTheme">
  <item name="zzbackground">@color/nightBackground</item>
  <item name="zzbackgroundDrawable">@color/nightBackground</item>
  <item name="zztextColor">@color/nightTextColor</item>
  <item name="zzItemBackground">@color/nightItemBackground</item>

  <item name="colorPrimary">@color/colorPrimaryNight</item>
  <item name="colorPrimaryDark">@color/colorPrimaryDarkNight</item>
  <item name="colorAccent">@color/colorAccentNight</item>
 </style>

 <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
 <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

 为相关属性设置对应模式的属性值: 

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <color name="dayBackground">#F2F4F7</color>
 <color name="dayTextColor">#000</color>
 <color name="dayItemBackground">#fff</color>

 <color name="nightItemBackground">#37474F</color>
 <color name="nightBackground">#263238</color>
 <color name="nightTextColor">#fff</color>
</resources> 

第三步:在布局文件中配置使用对应属性

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:orientation="vertical"
 android:background="?attr/zzbackground"
 app:backgroundAttr="zzbackground"
 tools:context="com.thinkfreely.changemode.MainActivity">

 <android.support.design.widget.AppBarLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  app:theme="@style/AppTheme.AppBarOverlay">
  <android.support.v7.widget.Toolbar
   android:id="@+id/toolbar"
   android:layout_width="match_parent"
   android:layout_height="?attr/actionBarSize"
   android:background="?attr/colorPrimary"
   app:backgroundAttr="colorPrimary"
   app:titleTextColor="?attr/zztextColor"
   app:popupTheme="@style/AppTheme.PopupOverlay"
   />
 </android.support.design.widget.AppBarLayout>

  <Button
   android:layout_width="match_parent"
   android:layout_height="120dp"
   android:gravity="center"
   android:textColor="?attr/zztextColor"
   app:textColorAttr="zztextColor"
   android:background="?attr/zzItemBackground"
   app:backgroundAttr="zzItemBackground"
   android:padding="10dp"
   android:layout_marginBottom="8dp"
   android:textSize="22sp"
   android:textAllCaps="false"
   android:text="夜间模式切换by Mr.Zk" />

 <android.support.v7.widget.RecyclerView
  android:id="@+id/recyclerView"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:scrollbars="vertical"/>
</LinearLayout> 

注意textColorAttr、backgroundAttr、backgroundDrawableAttr三个属性。如需当前页面立即刷新,需填加相应属性。

第四步:页面调用java代码

 @Override
 protected void onCreate(Bundle savedInstanceState) {
   //1. 在要立即切换效果的页面调用此方法
   ChangeModeController.getInstance().init(this,R.attr.class).setTheme(this, R.style.DayTheme, R.style.NightTheme);
   //在其他页面调用此方法
   //ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme);
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  //2.设置切换夜间活日间模式
  //ChangeModeController.changeDay(this, R.style.DayTheme);//切换日间模式
  //ChangeModeController.changeNight(this, R.style.NightTheme);//切换夜间模式
 }
 @Override
 protected void onDestroy() {
  super.onDestroy();
  //3. 在onDestroy调用
  ChangeModeController.onDestory();
 } 

代码调用三步,即可开始夜间之旅。
如果页面有新创建的视图要加入夜间模式控制,安卓源码调用:

   //添加额外view至夜间管理
  // ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary);
  //ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent);
  // ChangeModeController.getInstance().addTextColor(view,R.attr.colorAccent);

如果在改变夜间模式时有其他非标准定义的属性时,可在ChangeModeController.changeDay或ChangeModeController.changeNight之后调用如下代码给相关属性赋值:
   TypedValue  attrTypedValue = ChangeModeController.getAttrTypedValue(this, R.attr.zztextColor);
   toolbar.setTitleTextColor(getResources().getColor(attrTypedValue.resourceId));

源码下载地址:http://xiazai.jb51.net/201609/yuanma/AndroidChangeMode(jb51.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索Android模式切换
白天嗜睡夜间失眠、摄像头白天变夜间模式、天气预报白天夜间、夜间流量扣的白天流量、夜间排尿困难白天正常,以便于您获取更多的相关知识。

时间: 2024-09-30 06:54:51

三行Android代码实现白天夜间模式流畅切换_Android的相关文章

三行Android代码实现白天夜间模式流畅切换

Usage xml android:background= ?attr/zzbackground app:backgroundAttr= zzbackground //如果当前页面要立即刷新,这里传入属性名称 比如R.attr.zzbackground 传zzbackground即可 android:textColor= ?attr/zztextColor app:textColorAttr= zztextColor // 演示效果 Usage xml android:background="?

android基础教程之夜间模式实现示例_Android

复制代码 代码如下: package org.david.dayandnightdemo.cor; import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.graphics.Col

Android夜间模式最佳实践_Android

由于Android的设置中并没有夜间模式的选项,对于喜欢睡前玩手机的用户,只能简单的调节手机屏幕亮度来改善体验.目前越来越多的应用开始把夜间模式加到自家应用中,没准不久google也会把这项功能添加到Android系统中吧. 业内关于夜间模式的实现,有两种主流方案,各有其利弊,我较为推崇第三种方案: 1.通过切换theme来实现夜间模式. 2.通过资源id映射的方式来实现夜间模式. 3.通过修改uiMode来切换夜间模式. 值得一提的是,上面提到的几种方案,都是资源内嵌在Apk中的方案,像新浪微

android基础教程之夜间模式实现示例

复制代码 代码如下:package org.david.dayandnightdemo.cor; import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.graphics.Colo

9个非常棒的Android代码编辑器 移动开发者的最爱_Android

在网络信息高速发展的今天,移动设备的方便快捷已经深入人心,越来越多的开发人员会选择在移动设备上查看或编辑源代码.于是,Android平台上大量基于代码编程的应用应运而生,谷歌应用商店里的代码编辑器.编译器和开发环境比比皆是.由于不同工具的特性和缺点不尽相同,因此如何选择一款最适合自己的开发工具便成了一件头疼的事情.在这里,我们针对移动开发人员列出了9个非常有用的Android代码编辑器. TOP1:Code Peeker Code Peeker可以让语法高亮显示并允许你查找代码片段,且被Goog

Android判断是否为飞行模式简单方法_Android

判断是否为飞行模式:   复制代码 代码如下: boolean isAirplaneMode = Settings.System.getInt(mContext.getContentResolver(),                 Settings.System.AIRPLANE_MODE_ON, 0) ;  这里的mContext是android.content.Context

Android开发之文件操作模式深入理解_Android

一.基本概念 复制代码 代码如下: // 上下文对象 private Context context; public FileService(Context context) { super(); this.context = context; } // 保存文件方法 public void save(String filename, String fileContent) throws Exception { FileOutputStream fos = context.openFileOut

Android代码实现AdapterViews和RecyclerView无限滚动_Android

应用的一个共同的特点就是当用户欢动时自动加载更多的内容,这是通过用户滑动触发一定的阈值时发送数据请求实现的. 相同的是:信息实现滑动的效果需要定义在列表中最后一个可见项,和某些类型的阈值以便于开始在最后一项到达之前开始抓取数据,实现无限的滚动. 实现无限滚动的现象的重要之处就在于在用户滑动到最低端之前就行数据的获取,所以需要加上一个阈值来帮助实现获取数据的预期. 使用ListView和GridView实现 每个AdapterView 例如ListView 和GridView 当用户开始进行滚动操

PagerSlidingTabStrip制作Android带标签的多界面滑动切换_Android

这里我们用到了两个库,一个是Android SDK里自带的android-support-v4,另一个是PagerSlidingTabStrip,开源项目地址是https://github.com/astuetz/PagerSlidingTabStrip 用v4是需要用到他的ViewPager以及Fragment,而PagerSlidingTabStrip就是应用上边的标签. 成果预览: 下面,开工~布局 创建Activity什么的就不说了,喜欢ActionBar就创建一个ActionBarAc