44.android 简单的白天与夜晚模式切换

导读:本篇文章讲解 44.android 简单的白天与夜晚模式切换,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

44.android 简单的白天与夜晚模式切换

//这句依赖在android studio创建项目的时候就有了:

implementation 'com.android.support:appcompat-v7:26.1.0'

 

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

//把你原来的:

<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>
</style>

//改成:

<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

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

 

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

 

/默认模式一般是日间模式,系统会读取values中的值,当我们切换到夜间模式时让它读取values-night下的值。

//然后把你的values下的colors.xml和styles.xml文件复制到你新建的values-night里。

//再把你values-night下复制过来的colors.xml,里面的三个颜色值改一下,自己自定义颜色。

//例如:

<resources>
    <color name="colorPrimary">#7c05f2</color>
    <color name="colorPrimaryDark">#05f9a3</color>
    <color name="colorAccent">#fdb704</color>

</resources>

//—————–第四步 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);
    }
}

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

<uses-permission android:name="permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

//如果你使用了App类,并初始化了 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);

//但是最后你却只能有一个Activity切换了,不能一下切换全部了,那么你可以把App类里的初始化改为:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.getDefaultNightMode());

//—–最后注意,切换横竖屏时,生命周期会重走,要在AndroidManifest.xml加一行 :android:configChanges=”orientation|screenSize|keyboardHidden”,让它的生命周期不重走,注意。

<activity android:name=".MainActivity"
    android:configChanges="orientation|screenSize|keyboardHidden"
    >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

 

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

//—————————————————————–完—————————————————————————

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/118350.html

(0)

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!