java代码中切换模式_夜间模式切换的实现库,只需三行代码实现流畅切换

Implementation of night mode for Android.

用最简单的方式实现夜间模式,支持ListView、RecyclerView。

Preview

74890e828764

ChangeMode

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();

}

详细操作描述

第一步:自定义属性

第二步:配置夜间style文件

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

false

true

true

@color/dayBackground

@drawable/ic_launcher

@color/dayTextColor

@color/dayItemBackground

@color/nightBackground

@color/nightBackground

@color/nightTextColor

@color/nightItemBackground

@color/colorPrimaryNight

@color/colorPrimaryDarkNight

@color/colorAccentNight

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

#F2F4F7

#000

#fff

#37474F

#263238

#fff

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

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:layout_width="match_parent"

android:layout_height="wrap_content"

app:theme="@style/AppTheme.AppBarOverlay">

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: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:id="@+id/recyclerView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scrollbars="vertical"/>

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

属性

描述

textColorAttr

修改字体颜色时设置。如R.attr.zztextColor 传zztextColor 即可。例:app:textColorAttr="zztextColor"

backgroundAttr

修改背景颜色/背景图片时设置。同上。例: app:backgroundAttr="zzbackground"

backgroundDrawableAttr

修改背景颜色/背景图片时设置。同上。例: app:backgroundDrawableAttr="zzbackground"

第四步:页面调用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));

下一篇对实现库的原理进行介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值