Android高级日夜切换,Android日夜切换

现在好多app都有日夜切换效果,下面就是日夜切换的一个简单实现哈,

点击一个button按钮进行日夜切换

1.新建一个工具类ThemManager

package com.example.daynightthemdemo;

import android.content.Context;

import android.content.res.Resources;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

public class ThemManager {

private static ThemeMode mThemeMode = ThemeMode.DAY;

// 主题模式监听器

private static ListmThemeChangeListenerList = new LinkedList<>();

// 夜间资源的缓存,key : 资源类型, 值private static HashMap> sCachedNightResrouces = new HashMap<>();

// 夜间模式资源的后缀,比如日件模式资源名为:R.color.activity_bg, 那么夜间模式就为 :R.color.activity_bg_night

private static final String RESOURCE_SUFFIX = "_night";

/**

* 主题模式,分为日间模式和夜间模式

*/

public enum ThemeMode {

DAY, NIGHT

}

/**

* 设置主题模式

*

* @param themeMode

*/

public static void setThemeMode(ThemeMode themeMode) {

if (mThemeMode != themeMode) {

mThemeMode = themeMode;

if (mThemeChangeListenerList.size() > 0) {

for (OnThemeChangeListener listener : mThemeChangeListenerList) {

listener.onThemeChanged();

}

}

}

}

/**

* 根据传入的日间模式的resId得到相应主题的resId,注意:必须是日间模式的resId

*

* @param dayResId 日间模式的resId

* @return 相应主题的resId,若为日间模式,则得到dayResId;反之夜间模式得到nightResId

*/

public static int getCurrentThemeRes(Context context, int dayResId) {

if (getThemeMode() == ThemeMode.DAY) {

return dayResId;

}

// 资源名

String entryName = context.getResources().getResourceEntryName(dayResId);

// 资源类型

String typeName = context.getResources().getResourceTypeName(dayResId);

HashMapcachedRes = sCachedNightResrouces.get(typeName);

// 先从缓存中去取,如果有直接返回该id

if (cachedRes == null) {

cachedRes = new HashMap<>();

}

Integer resId = cachedRes.get(entryName + RESOURCE_SUFFIX);

if (resId != null && resId != 0) {

return resId;

} else {

//如果缓存中没有再根据资源id去动态获取

try {

// 通过资源名,资源类型,包名得到资源int值

int nightResId = context.getResources().getIdentifier(entryName + RESOURCE_SUFFIX, typeName, context.getPackageName());

// 放入缓存中

cachedRes.put(entryName + RESOURCE_SUFFIX, nightResId);

sCachedNightResrouces.put(typeName, cachedRes);

return nightResId;

} catch (Resources.NotFoundException e) {

e.printStackTrace();

}

}

return 0;

}

/**

* 注册ThemeChangeListener

*

* @param listener

*/

public static void registerThemeChangeListener(OnThemeChangeListener listener) {

if (!mThemeChangeListenerList.contains(listener)) {

mThemeChangeListenerList.add(listener);

}

}

/**

* 反注册ThemeChangeListener

*

* @param listener

*/

public static void unregisterThemeChangeListener(OnThemeChangeListener listener) {

if (mThemeChangeListenerList.contains(listener)) {

mThemeChangeListenerList.remove(listener);

}

}

/**

* 得到主题模式

*

* @return

*/

public static ThemeMode getThemeMode() {

return mThemeMode;

}

/**

* 主题模式切换监听器

*/

public interface OnThemeChangeListener {

/**

* 主题切换时回调

*/

void onThemeChanged();

}

}

2.colors.xml

#3F51B5

#3b3b3b

#303F9F

#383838

#FF4081

#a72b55

#FF000000

#FFFFFF

#FFFFFF

#3b3b3b

3.MainActivity中

package com.example.daynightthemdemo;

import android.graphics.drawable.ColorDrawable;

import android.os.Build;

import android.os.Bundle;

import android.support.v7.app.ActionBar;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.view.Window;

import android.widget.Button;

import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, ThemManager.OnThemeChangeListener {

private ActionBar supportActionBar;

private Button change;

private RelativeLayout rela;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

// getApplication().getResources().getIdentifier(String name, String defType, String defPackage)

ThemManager.registerThemeChangeListener(this);//一定的调用

supportActionBar = MainActivity.this.getSupportActionBar();

}

private void initView() {

change = (Button) findViewById(R.id.change);

change.setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.change:

ThemManager.setThemeMode(ThemManager.getThemeMode() == ThemManager.ThemeMode.DAY

? ThemManager.ThemeMode.NIGHT : ThemManager.ThemeMode.DAY);

break;

}

}

@Override

public void onThemeChanged() {

// textView.setTextColor(getResources().getColor(ThemManager.getCurrentThemeRes(getContext(), R.color.textColor)));

//btn_theme.setTextColor(getResources().getColor(ThemeManager.getCurrentThemeRes(getContext(), R.color.textColor)));

// rel.setBackgroundColor(getResources().getColor(ThemManager.getCurrentThemeRes(getContext(), R.color.backgroundColor)));

// ((Main2Activity) getActivity()).findViewById(R.id.tab_layout).setBackgroundColor(getResources().getColor(ThemManager.getCurrentThemeRes(getContext(), R.color.backgroundColor)));

// ((Main2Activity) getActivity()).findViewById(R.id.tab_layout).setBackgroundColor(getResources().getColor(ThemManager.getCurrentThemeRes(getContext(), R.color.backgroundColor)));

// ((Main2Activity) getActivity()).findViewById(R.id.tab_layout).setBackgroundColor(getResources().getColor(ThemManager.getCurrentThemeRes(getContext(), R.color.backgroundColor)));

// ((Main2Activity) getActivity()).findViewById(R.id.tab_layout).setBackgroundColor(getResources().getColor(ThemManager.getCurrentThemeRes(getContext(), R.color.backgroundColor)));

MainActivity.this.findViewById(R.id.rela).setBackgroundColor(getResources().getColor(ThemManager.getCurrentThemeRes(MainActivity.this, R.color.backgroundColor)));

// 设置标题栏颜色

if (supportActionBar != null) {

supportActionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(ThemManager.getCurrentThemeRes(MainActivity.this, R.color.colorPrimary))));

}

// 设置状态栏颜色

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

Window window = MainActivity.this.getWindow();

window.setStatusBarColor(getResources().getColor(ThemManager.getCurrentThemeRes(MainActivity.this, R.color.colorPrimary)));

}

}

//移除 ThemeChangeListener

@Override

protected void onDestroy() {

super.onDestroy();

ThemManager.unregisterThemeChangeListener(this);

}

}

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

以上代码有copy的,如有不妥,联系欧啦 哈!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android日间模式切换是指在Android设备中切换应用程序的主题模式,以更好地适应当前环境或用户的个人喜好。在日间模式下,应用程序通常使用浅色的背景和黑色的文本,以提供清晰明亮的外观。下面是关于Android日间模式切换的一些信息: 1. 如何切换日间模式Android设备通常提供了一个系统菜单或设置选项,允许用户切换日间模式。用户可以在“设置”或“显示”菜单中找到“主题”或“外观”选项,并选择日间模式以启用它。 2. 日间模式的用途:日间模式在白天或明亮的环境下使用,可提供更好的可读性和可见性。由于浅色背景和黑色文本的对比度较高,阅读和浏览应用程序内容会更加舒适和方便。 3. 切换日间模式的优势:切换到日间模式可以节省设备的电池寿命,因为设备的背光需要较少的功耗。同时,对于部分用户来说,浅色背景和黑色文本也可能更易于处理眼睛疲劳问题。 4. 日夜模式的应用场景:日间模式适用于大多数日常使用情况,特别是在户外环境或光线充足的环境下。例如,用户在户外使用应用程序时,日间模式可以保证内容清晰可见。 5. 自动切换和自定义设置:一些Android设备允许用户根据日出和日落时间自动切换日间模式。此外,用户还可以根据自己的喜好,自定义日间模式的背景颜色、文本颜色和其他外观设置。 总结起来,Android日间模式切换是一个方便的功能,允许用户根据环境或个人偏好来调整应用程序的外观。通过切换到日间模式,用户可以获得更好的可读性和可见性,并且在一定程度上延长设备的电池寿命。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值