Android 简单的白天与夜晚模式切换

//使用Android SDK自带的API,完成白天与夜晚模式切换,非常简单。

这里写图片描述

//——————-第一步 打开你的项目values下的style.xml文件修改————————
//把你原来的:

<!-- Customize your theme here. -->

<item name="colorPrimary">@color/colorPrimary</item>

<item name="colorPrimaryDark">@color/colorPrimaryDark</item>

<item name="colorAccent">@color/colorAccent</item>

//改成:

<!-- Customize your theme here. -->

<item name="colorPrimary">@color/colorPrimary</item>

<item name="colorPrimaryDark">@color/colorPrimaryDark</item>

<item name="colorAccent">@color/colorAccent</item>

//以上把Light修改为 DayNight,因为DayNight这个主题或者它的子主题才支持白夜间模式的切换。

//—————-第二步 在res下新建文件夹values-night—————–

/默认模式一般是日间模式,系统会读取values中的值,当我们切换到夜间模式时让它读取values-night下的值。
//然后把你的values下的colors.xml和styles.xml文件复制到你新建的values-night里。
//再把你values-night下复制过来的colors.xml,里面的三个颜色值改一下,自己自定义颜色。
//例如:

<color name="colorPrimary">#7c05f2</color>

<color name="colorPrimaryDark">#05f9a3</color>

<color name="colorAccent">#fdb704</color>


//—————–第四步 Activity里调用即可—————————————–
//切换成夜间模式,需要调用Activity的recreate()方法。

getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);

//不加recreate();也行,要是切换不成功,再加这行试试

//recreate();
//切换白天模式,需要调用Activity的recreate()方法。

getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);

//不加recreate();也行,要是切换不成功,再加这行试试

//recreate();
//————————————切换完成——————————————-
//———————————————————注意——————————————————–
//这个API还带有自动模式,如果我们app有定位权限、网络权限等,系统可以自动确实现在是晚上还是白天,当用户打开APP时会自动切换到响应的模式,这个模式我们可以设置一个APP类初始化或者Application中用一个静态代码快来设置
//—————- 新建App类继承Application ,初始化并在AndroidManifest.xml调用——————–

public class App extends Application {

public static BaseActivity mContent;

@Override

public void onCreate() {

    super.onCreate();

// MODE_NIGHT_AUTO

    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);

}

}
//网络权限加定位权限。


//如果你使用了App类,并初始化了 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
//但是最后你却只能有一个Activity切换了,不能一下切换全部了,那么你可以把App类里的初始化改为:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.getDefaultNightMode());
//—–最后注意,切换横竖屏时,生命周期会重走,要在AndroidManifest.xml加一行 :android:configChanges=”orientation|screenSize|keyboardHidden”,让它的生命周期不重走,注意。

android:configChanges="orientation|screenSize|keyboardHidden"

>

<intent-filter>

    <action android:name="android.intent.action.MAIN" />



    <category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

//如果不想让它切换横竖屏就加android:screenOrientation=”portrait”

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值