Android 设置app深色、浅色、跟随系统

这篇具有很好参考价值的文章主要介绍了Android 设置app深色、浅色、跟随系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android深色模式适配

我们需要再用户设置时候,记录下来,用户的设置,等app再次启动时候,获取之前设置,重新设置

    public static void setThemeMode() {
        int themeModeType = SpUtils.getThemeModeType();
        if (themeModeType == 1) {
            //1:浅色
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        } else if (themeModeType == 2) {
            // 2:深色
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        } else {
            //跟随系统
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
        }
    }

1、设置单个Activity

   /**
     * 设置单个Activity 深色、浅色、跟随系统
     *
     * @param appCompatDelegate Activity AppCompatDelegate
     * @param themeModeType  0:跟随系统 1:浅色 2:深色
     */
    public static void setThemeModeByActivity(AppCompatDelegate appCompatDelegate, int themeModeType) {
        if (appCompatDelegate != null) {
            switch (themeModeType) {
                case 0:
                    appCompatDelegate.setLocalNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
                    break;
                case 1:
                    appCompatDelegate.setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    break;
                case 2:
                    appCompatDelegate.setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    break;
            }
        }
    }

2、获取当前Activity是否开启深色

   /**
     * 通过Activity Resources 获取当前是否开启深色模式
     *
     * @param object
     * @return
     */
    public static boolean nightModeByUiResources(Object object) {
        if (object != null) {
            if (object instanceof Activity) {
                int currentNightMode = ((Activity) object).getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
                return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
            } else if (object instanceof androidx.fragment.app.Fragment) {
                int currentNightMode = ((Fragment) object).getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
                return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
            } else if (object instanceof android.app.Fragment) {
                int currentNightMode = ((android.app.Fragment) object).getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
                return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
            }
        }

        return false;
    }

3、webView设置

   /**
     * 设置webView 深色或者浅色模式
     *
     * @param activity
     * @param webSetting
     */
    public static void setWebViewNight(Activity activity, WebSettings webSetting) {
        if (activity == null || webSetting == null) {
            return;
        }
        setWebViewNight(webSetting, nightModeByUiResources(activity));

    }

    /**
     * 设置webView 暗黑模式
     *
     * @param webSetting
     * @param nightMode true:深色  false:浅色
     */
    public static void setWebViewNight(WebSettings webSetting, boolean nightMode) {
        boolean featureSupported = false;
        try {
            featureSupported = WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK);
        } catch (AbstractMethodError e) {
            e.printStackTrace();
        }
        if (featureSupported) {
            if (nightMode) {
                //启用 webview 的强制黑暗模式,这意味着 webview 的内容将始终以黑暗主题呈现
                WebSettingsCompat.setForceDark(webSetting, WebSettingsCompat.FORCE_DARK_ON);
            } else {
                //禁用 webview 的强制暗模式,这意味着 webview 的内容将按原样呈现
                WebSettingsCompat.setForceDark(webSetting, WebSettingsCompat.FORCE_DARK_OFF);

            }
        }
    }

但是h5页面需要做特别判断才能拿到webView深浅模式

@media (prefers-color-scheme: dark) {这里是样式代码}

4、深色浅色切换时候,重启app文章来源地址https://www.toymoban.com/news/detail-811770.html

  /**
     * 浅色和深色模式切换,杀死进程,重新打开app
     *
     * @param activity
     */
    public static void restartApp(Activity activity) {
        Intent intent = activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName());
        if (intent != null) {
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            activity.startActivity(intent);
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }

到了这里,关于Android 设置app深色、浅色、跟随系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Typora打造最适合编程笔记的精美主题(浅色版和修改后的深色版),可自行修改喜欢的样式。

    转载自 豫冬川:Typora打造最适合编程笔记的精美主题(浅色版和修改后的深色版),可自行修改喜欢的样式。 Typora是非常优秀的Markdown编辑器,可惜自带的样式比较简陋。经过多种typora主题的选择,感觉少数派风格最好,@张晋基于少数派风格的主题进行了一些修改。我觉得

    2023年04月18日
    浏览(31)
  • Android项目在 app 中通过 WebView 访问 url显示空白,使用浏览器可以打开,Android WebView加载出现空白页面问题解决

    服务器证书校验主要针对 WebView 的安全问题。 在 app 中需要通过 WebView 访问 url,因为服务器采用的自签名证书,而不是 ca 认证,使用 WebView 加载 url 的时候会显示为空白,出现无法加载网页的情况。 使用 ca 认证的证书,在 WebView 则可以直接显示出来,不需要特殊处理。 以往

    2024年02月04日
    浏览(54)
  • 将应用设置成系统App/获取Android设备SN号

    1,和系统签名一致;(签名设置+签名文件) 2,配置Manifest  至此你的App就是一个系统App了,可以执行一些系统App才能有的操作,如获取机器SN号:

    2024年02月13日
    浏览(44)
  • Android WebView 开发通过 chrome://inspect 调试页面设置

    1. 首先在app/src/main/AndroidManifest.xml 设置允许对app debug 2. 在初始化 WebView 时调用 webView.setJavaScriptEnabled(true) 方法 3. 手机端/模拟器安装移动端chrome浏览器,如果是配合pc端chrome调试,手机端chrome版本不能比pc端chrome版本高,否则可能无法成功调试。此外也可以使用手机端chrome+

    2024年02月05日
    浏览(47)
  • Android 13.0 系统多个播放器app时,设置默认播放器

     在13.0的系统产品开发中,对于在系统中有多个播放器的时候,这时候如果调用代码打开播放器,会出现多个播放器列表让用户 选择启动哪个播放器,所以产品开发需求需要设置默认播放器,当打开播放器的时候,就直接打开播放器就可以了,所以就需要 了解查询播放器列

    2024年02月08日
    浏览(73)
  • android 12.0 第三方输入法app设置系统默认输入法

    在12.0的产品开发中,有功能需要要求设置默认输入法,替换掉系统的输入法,所以这就需要了解设置输入法的相关功能需求,然后根据输入法包名来设置默认输入法 在设置系统默认输入法中 每个系统输入法的id不同 根据id设置输入法 需要先根据需要设置默认输入法的id,来

    2024年02月07日
    浏览(70)
  • Android免安装升级系统WebView内核探索

    Android5.0以后WebView升级需要去Google Play安装APK(图一),就算安装了以后也不一定能行,像华为、Amazon等特殊机型WebView的Chromium版本一般比较低,只能用它自己的WebView无法用Google的WebView(图二)。 华为机上WebView内核的Chromium版本低于107无法播放H265视频,为了解决上述问题可以用

    2024年03月27日
    浏览(53)
  • Android Studio run app 设置 release 模式

    背景 为验证我们的 SDK 集成在客户应用上的质量,需要我们的测试环境尽量的与客户应用保持一致。客户普遍都会打 release 包并混淆,然后进行上线应用,因此我们在测试过程中也需要使用 release 包进行验证。对于 Android Studio 运行项目,默认安装到手机上的 app 属于debug 包,

    2024年02月12日
    浏览(51)
  • Android 分别使用Java和Kotlin给Textview设置第三方字体、APP全局字体、 Android X字体设置

    本文介绍Android实现全局设置自定义字体和局部设置自定义字体即单个TextView设置字体,同时也提供了一些优秀的三方字体框架,基本可以满足开发者对字体设置的全部要求。 使用自定义字体前后效果图 首先需要了解Android之assets 简而言之,你的图片、svg文件放在工程的res/d

    2024年02月07日
    浏览(49)
  • android 12.0设置上网应用白名单(上网app白名单)

    在12.0的产品rom定制开发中,在对产品进行网络模块开发中,有功能需要要求设置某些app可以上网,某些app不可以上网,就是所谓的网络应用白名单功能 在12.0系统中整个网络模块都是由NetworkManagementService.java服务负责通讯的 接下来先看下NetworkManagementService.java

    2024年02月10日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包