android夜间模式的实现

Android9夜间模式 Android9可在开发者选项中开启夜间模式,本文研究其配置和效果。 阅读详情
注:急速开发的人,可以直接看第三种实现方式

1:修改theme,重启activity(Google自家在内的很多应用都是采用此种方式实现夜间模式的)

优点:正儿八经的夜间模式,配色看着舒服

缺点:规模较大的应用,需要随theme变化的属性会很多,都需要逐一定义,有点麻烦,另外一个缺点是要使得新theme生效,一般需要restartActivity来切换UI,会导致切换主题时界面闪烁

核心思路:自定义一个颜色属性名 A,A在日间和夜间模式下都有具体的颜色代码,页面布局文件只管引用A,至于是日间还是夜间,由后台主题决定。

        

附上一二中方法的图

(原图) (第一种实现)(第二种实现)

好,下面来讲讲具体的实现步骤,本环节使用的开发环境是Eclipse  demo地址http://www.oschina.net/code/snippet_2702417_55892

1 首先

attrs.xml(声明属性的类型,布局xml中用) reference可以使用系统的资源ID,比如R.color.gray; color可以直接使用#ffffff颜色代码

复制代码
 <attr name="colorValue" format="color" />  
    <attr name="floatValue" format="float" />  
    <attr name="integerValue" format="integer" />  
    <attr name="booleanValue" format="boolean" />  
    <attr name="dimensionValue" format="dimension" />  
    <attr name="stringValue" format="string" />  
    <attr name="referenceValue" format="color|reference" />  
    <attr name="imageValue" format="reference"/>  
  
    <attr name="curVisibility"> 
        <!-- 相当于View的Visiblity --> 
    <enum name="show" value="0" />  
    <!-- Not displayed, but taken into account during layout (space is left for it).相当于View的unVisiblity -->  
    <enum name="inshow" value="1" />  
    <!-- Completely hidden, as if the view had not been added.相当于View的GONE -->  
    <enum name="hide" value="2" />  
    </attr> 
复制代码

 

colors.xml(调色板,集中管理颜色hex)遵循优秀格式规范,即调色板模式,避免使用btn1,btn2,fontTitle,fontText之类的颜色名。

复制代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="title">#101115</color>
   <color name="night_title">#FFFFFF</color> 
</resources>
复制代码

 string.xml

  1. <string name="app_name">dayandNight</string>  
  2.    <string name="hello_world">Hello world!</string>  
  3.    <string name="action_settings">白模式</string>  
  4.    <string name="night_action_settings">夜模式</string>  


styles.xml(日间、夜间主题)

复制代码
<resources>
      <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.


        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>
    

    <style name="DayTheme" parent="AppTheme">
        <item name="colorValue">@color/title</item>
        <item name="floatValue">0.35</item>
        <item name="integerValue">33</item>
        <item name="booleanValue">true</item>
        <item name="dimensionValue">16dp</item>
        <!-- 如果string类型不是填的引用而是直接放一个字符串,在布局文件中使用正常,但代码里获取的就有问题 -->
        <item name="stringValue">@string/action_settings</item>
        <item name="referenceValue">@drawable/bg</item>
        <item name="imageValue">@drawable/day</item>
        <item name="curVisibility">show</item>
    </style>

    <style name="NightTheme" parent="AppTheme">
        <item name="colorValue">@color/night_title</item>
        <item name="floatValue">1.44</item>
        <item name="integerValue">55</item>
        <item name="booleanValue">false</item>
        <item name="dimensionValue">18sp</item>
        <item name="stringValue">@string/night_action_settings</item>
        <item name="referenceValue">@drawable/night_bg</item>
        <item name="imageValue">@drawable/night</item>
        <item name="curVisibility">hide</item>
    </style>
</resources>
复制代码

2activity的使用

  1. protected void onCreate(Bundle savedInstanceState) {  
  2.         super.onCreate(savedInstanceState);  
  3.         if(MyApp.isLightMode()){    
  4.             this.setTheme(R.style.NightTheme);    
  5.         }else{    
  6.             this.setTheme(R.style.DayTheme);    
  7.         }    
  8.         setContentView(R.layout.activity_one);  
  9.     }  
  10.       
  11.     public void onClick(View view){  
  12.         MyApp.setIslightMode(!MyApp.isLightMode());  
  13.         recreate();  
  14.     }  

xml的布局:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:background="?attr/referenceValue"  
  6.     android:orientation="vertical"  
  7.     android:gravity="center" >  
  8.   
  9.     <TextView  
  10.         android:id="@+id/setting_Color"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         android:text="TextView"  
  14.         android:textColor="?attr/colorValue" />  
  15.   
  16.     <CheckBox  
  17.         android:id="@+id/setting_show_answer_switch"  
  18.         android:layout_width="wrap_content"  
  19.         android:layout_height="wrap_content"  
  20.         android:checked="?attr/booleanValue" />  
  21.   
  22.     <TextView  
  23.         android:id="@+id/setting_Title"  
  24.         android:layout_width="wrap_content"  
  25.         android:layout_height="wrap_content"  
  26.         android:text="pszwzy"  
  27.         android:textColor="?attr/colorValue"  
  28.         android:textSize="?attr/dimensionValue" />  
  29.   
  30.     <TextView  
  31.         android:id="@+id/setting_Text"  
  32.         android:layout_width="wrap_content"  
  33.         android:layout_height="wrap_content"  
  34.         android:text="?attr/stringValue" />  
  35.   
  36.     <ImageView  
  37.         android:id="@+id/setting_Image"  
  38.         android:layout_width="wrap_content"  
  39.         android:layout_height="wrap_content"  
  40.         android:src="?attr/imageValue" />  
  41.   
  42.     <View  
  43.         android:id="@+id/setting_line"  
  44.         android:layout_width="match_parent"  
  45.         android:layout_height="1dp"  
  46.         android:visibility="?attr/curVisibility" />  
  47.     <Button   
  48.         android:onClick="onClick"  
  49.         android:layout_width="match_parent"  
  50.         android:layout_height="wrap_content"  
  51.         android:text="模式切换"  
  52.         android:textColor="?attr/colorValue"          
  53.         />  
  54.   
  55. </LinearLayout>  
注:遇到放回activity闪屏的问题可以

(1)在BaseActivity中创建下面的方法

  1. public static void updateTheme(Activity activity,isNight)  
  2. {  
  3.   MyApp.setNightMode(isNight);  
  4.   activity.recreate();  
  5. }  


2:使用一个带黑色带透明度的View,盖在现有的activity上,效果类似你带上墨镜,看着太阳不刺眼。

优点:不用重启activity,不闪屏;加上透明度过渡动画,模式之间切换非常舒服,解决了1中,白底图片依旧刺眼的问题。;

缺点:配色没变化,就算带上墨镜,白天依旧是白天。

核心思路:使用WindowManager,在当前activity上,通过addView,添加一个黑色带透明度的View。

  1. //第二中方式,只是提供一种思路,逻辑没有去实习  
  2.     public void onClickT(View view){  
  3.         LayoutParams  mNightViewParam = new LayoutParams(  
  4.                     LayoutParams.TYPE_APPLICATION,  
  5.                     LayoutParams.FLAG_NOT_TOUCHABLE | LayoutParams.FLAG_NOT_FOCUSABLE,  
  6.                     PixelFormat.TRANSPARENT);  
  7.   
  8.         WindowManager   mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);  
  9.         View   mNightView = new View(this);  
  10.         mWindowManager.addView(mNightView, mNightViewParam);  
  11.         mNightView.setBackgroundResource(R.color.night_mask);  
  12. }  


3:通过修改Theme来切换夜间模式,不过不会出现闪屏()的情况。

和第一种方式一样需要theme的设置从上到下的代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <attr name="gray_3_double" format="color" />  
  4.     <attr name="source_bg" format="reference" />  
  5. </resources>  
  1. </pre><pre code_snippet_id="1671755" snippet_file_name="blog_20160504_8_4007554" name="code" class="html"><?xml version="1.0" encoding="utf-8"?>  
  2. <resources xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <style name="AppTheme_Night" >  
  4.         <item name="gray_3_double">@color/gray_3_night</item>  
  5.         <item name="source_bg">@drawable/source_bg_night</item>  
  6.     </style>     
  7. </resources>  


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources xmlns:android="http://schemas.android.com/apk/res/android">  
  3.   
  4.     <style name="AppTheme_Light" >  
  5.          <item name="gray_3_double">@color/gray_3_light</item>  
  6.          <item name="source_bg">@drawable/source_bg_light</item>  
  7.     </style>  
  8.   
  9. </resources>  
先看下BaseActivity
  1. public abstract class BaseActivity extends Activity {  
  2. protected int skin;  
  3. public Context mContext;  
  4. SharedPreferences sp;  
  5.   
  6.   
  7. @Override  
  8. protected void onCreate(Bundle savedInstanceState) {  
  9. <span style="white-space:pre">    </span>setThemeMode(getSkinTypeValue());  
  10. <span style="white-space:pre">    </span>super.onCreate(savedInstanceState);  
  11. <span style="white-space:pre">    </span>init();  
  12. <span style="white-space:pre">    </span>}  
  13. <span style="white-space:pre">    </span>public abstract void init();  
  14. <span style="white-space:pre">    </span>protected void setThemeMode(SkinType skinType) {  
  15. <span style="white-space:pre">    </span>  switch (skinType) {  
  16. <span style="white-space:pre">    </span>  case Light:  
  17. <span style="white-space:pre">        </span>setTheme(R.style.AppTheme_Light);  
  1. <span style="white-space:pre">    </span>  break;  
  2. <span style="white-space:pre">    </span> case Night:  
  3. <span style="white-space:pre">        </span>setTheme(R.style.AppTheme_Night);  
  4. <span style="white-space:pre">    </span> break;  
  5. <span style="white-space:pre">    </span> default:  
  6. <span style="white-space:pre">        </span>setTheme(R.style.AppTheme_Light);  
  7. <span style="white-space:pre">    </span> break;  
  8. <span style="white-space:pre">    </span>}  
  9. }  
  10. //获取用户选取的模式  
  11. protected SkinType getSkinTypeValue() {  
  12. <span style="white-space:pre">    </span>if (sp == null) {  
  13. <span style="white-space:pre">    </span>sp = getSharedPreferences("AppSkinType", Context.MODE_PRIVATE);  
  14. <span style="white-space:pre">    </span>}  
  15. <span style="white-space:pre">    </span>int i = sp.getInt("AppSkinTypeValue", 0);  
  16. <span style="white-space:pre">    </span>switch (i) {  
  17. <span style="white-space:pre">    </span> case 0:  
  18. <span style="white-space:pre">        </span>return SkinType.Light;  
  19.       case 1:  
  20. <span style="white-space:pre">        </span>return SkinType.Night;  
  21. <span style="white-space:pre">    </span> default:  
  22. <span style="white-space:pre">    </span> break;  
  23. <span style="white-space:pre">    </span>}  
  24. <span style="white-space:pre">    </span>return SkinType.Light;  
  25. }  
  26. //保存用户是选取的模式  
  27. public void saveSkinValue(int skin) {  
  28. <span style="white-space:pre">    </span>if (sp == null) {  
  29. <span style="white-space:pre">    </span>sp = getSharedPreferences("AppSkinType", Context.MODE_PRIVATE);  
  30. <span style="white-space:pre">    </span>}  
  31. <span style="white-space:pre">    </span>Editor editor = sp.edit();  
  32. <span style="white-space:pre">    </span>editor.putInt("AppSkinTypeValue", skin);  
  33. <span style="white-space:pre">    </span>editor.commit();  
  34.   
  35. }  

在看下第一个activity的使用的
  1. public class MainActivity extends BaseActivity {  
  2.     private CheckBox cbSetting;  
  3.     private Button btnForward;  
  4.     private TextView tv_title;  
  5.     private View llNight;  
  6.       
  7.       
  8.     @Override  
  9.     public void init() {  
  10.         setContentView(R.layout.activity_main);  
  11.         llNight = findViewById(R.id.ll_night);  
  12.         tv_title = (TextView) findViewById(R.id.tv_title);  
  13.         btnForward = (Button) findViewById(R.id.forward);  
  14.         cbSetting = (CheckBox) findViewById(R.id.cb_setting);  
  15.         cbSetting.setOnCheckedChangeListener(new OnCheckedChangeListener() {  
  16.             @Override  
  17.             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
  18.                 if (isChecked) {  
  19.                     // 夜间模式  
  20.                     saveSkinValue(1);  
  21.                     setTheme(R.style.AppTheme_Night);//防止getTheme()取出来的值是创建时候得值  
  22.                     initView();  
  23.                 } else {  
  24.                     // 白天模式  
  25.                     saveSkinValue(0);  
  26.                     setTheme(R.style.AppTheme_Light);//防止getTheme()取出来的值是创建时候得值  
  27.                     initView();   
  28.                 }  
  29.             }  
  30.         });  
  31.           
  32.         btnForward.setOnClickListener(new View.OnClickListener() {  
  33.             @Override  
  34.             public void onClick(View v) {  
  35.                 Intent intent = new Intent(MainActivity.this,SecondActivity.class);  
  36.                 startActivity(intent);  
  37.             }  
  38.         });  
  39.     }  
  40.     //改变模式后手动修改UI,不然出现闪屏  
  41.     private void initView(){  
  42.         <span style="color:#ff6666;">TypedValue typedValue = new TypedValue();  
  43.         Theme theme = getTheme();  
  44.         theme.resolveAttribute(R.attr.gray_3_double, typedValue, true);     
  45.         btnForward.setTextColor(getResources().getColor(typedValue.resourceId));  
  46.         tv_title.setTextColor(getResources().getColor(typedValue.resourceId));  
  47.         theme.resolveAttribute(R.attr.source_bg, typedValue, true);     
  48.         llNight.setBackgroundDrawable(getResources().getDrawable(typedValue.resourceId));</span>    
  49.     }     
  50. }  
大体就是这样实现,附上demo链接 http://www.oschina.net/code/snippet_2702417_55886

优点:

bug少,用户体验好

缺点:

UI控件多的时候,改起来工作量不小。代码量很大

4 通过模式库changesKin

http://www.codeceo.com/article/android-changeskin-usage.html





 注:这里提到的都是资源内嵌在Apk中的方案,像qq通过下载方式实现夜间的方式可以去百度一下。

参考: http://m.oschina.net/blog/668384
Android实战——白天黑夜模式设置 白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。 阅读详情

相关推荐

密码学:一文看懂Base64算法

Base64常常在我们开发中出现,我们可能只知道它是一串乱码(看不懂的符号),知道有时候知道我们需要把一些数据进行base64编码,有时候需要进行Base64解码。但是却不知道它的作用是什么?它存在的意义是什么?还有它是如何生成的?如何编码和解码?上述的疑问相信在你读完本篇文章之后烟消云散。下面开始正文。Base64是什么?它和加密解密操作有什么关系吗?没错,这就是经过Base64编码后的字符串。对它解码后,我们获得以下内容点个关注,是对我持续创作的最大的鼓励!

Shujie 1万+

Android开发黑白灰模式和夜间模式设置

Android开发黑白化,夜间模式设置。

juer2017的博客 1833

【Zemax光学设计实训一】---单透镜光学设计

建立一个焦距为100mm、入瞳直径为25mm的单透镜系统,该透镜中心厚度为4mm,其两个面的曲率半径分别为100mm、-100mm,全视场2w=10°。该系统在可见光下工作,采用BK7玻璃,光阑设置在人射光线遇到的透镜的第一个光学表面;并对其展开优化。

yh的博客 3617

Android夜间模式的简单实现

Android 6.0以后系统提供了AppCompatDelegate用来实现夜间模式和日间模式的切换,AppCompatDelegate中存在以下几种模式: AppCompatDelegate.MODE_NIGHT_YES:设置夜间模式 AppCompatDelegate.MODE_NIGHT_NO:设置日间模式 AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM:跟随系统设置决定是否设置夜间模式 AppCompatDelegate.MODE_NIGHT_AUTO

xuzhb 6450

基于Plecs的LLC谐振变换器闭环设计:从PI参数整定到动态响应优化

本文详细介绍了在Plecs仿真环境中,如何为半桥LLC谐振变换器设计并优化闭环控制系统。从开环模型搭建与特性分析入手,重点阐述了基于频域法的PI控制器参数整定流程,并通过负载阶跃、输入电压突变等测试优化动态响应。文章还分享了从仿真模型过渡到实际硬件时的关键注意事项,帮助工程师实现稳定、高效的电源设计。

e4f5g6h的博客 623

Unity Spine 3.8 (URP) 踩坑(Shader报错修改)

提供了新思路,打算尝试一下URP。但美术使用的spine版本是3.8,项目用的Unity2021.3.11f1c2,直接导入spine URP包,shader报错:half4 不能转成 SurfaceData2D;Spine-Sprite-StandardPass-URP-2D.hlsl 也报这个错,也是同样的改法即可。今天搜索spine优化,看到一篇文章。

hrlr1230的博客 4565

Android切换日夜模式,不重建activity的方法

优化Android切换日夜模式,不重建activity

SixSix的自留地 3072

具身智能:原理、算法与系统 第3章 具身智能的感知-认知-行为框架

具身智能的PCB框架源于对生物智能系统的观察:动物通过感官接收环境信息(感知),基于内部模型进行预测和决策(认知),并通过身体执行动作改变环境(行为),而这一改变又通过感知反馈形成闭环。这一框架在两篇核心文献中得到了深入阐述:提出了系统的数学形式化和工程实现,则从认知科学角度强调了归纳偏置和双过程理论的重要性。

VectorShift的博客 155

android os夜间,android 夜间模式实现

最近项目需要需要实现 夜间模式功能,大致有两种实现方式:设置日间、夜间两套theme,使用 setTheme 的方法让 Activity 设置主题;通过Android Support Library:appcompat 包中的 UiMode 来支持日间/夜间模式的切换(v23之后才有日间、夜间模式)方法一需要对原有所有布局文件进行修改,工作量巨大,不适应于目前我们这种已经做了很久的项目,所以决定...

weixin_35935514的博客 279

基于YOLOv26的护栏损坏检测系统原理讲解

本文介绍了一种基于YOLOv26深度学习的护栏损坏检测系统。该系统通过车载摄像头或固定监控采集道路护栏图像,利用改进的YOLOv26算法实现高效准确的损坏检测。系统采用分层架构设计,包含数据采集、检测处理、分析评估和应用服务四个层次,能够自动识别变形、断裂、缺失等五种常见损坏类型,并评估损坏严重程度。相比传统人工检测方法,该系统大幅提高了检测效率和准确性,降低了人工成本和安全风险。关键技术包括多尺度特征融合、注意力机制和自适应非极大值抑制等创新设计,使系统在复杂道路环境下仍能保持稳定的检测性能。

一键难忘的博客 327

uniapp - 获取设备麦克风权限+麦克风设备列表,用户可选择切换麦克风设备功能,选择麦克风采集设备后点击录制音频外部声音+可随时暂停/继续录音+记录音频录制时长(支持在线播放试听或下载MP3文件)

uniapp获取麦克风设备列表,uniapp录制声音,Uniapp获取麦克风权限,uniapp苹果ios安卓app获取麦克风设备列表,Uniapp H5获取浏览器麦克风并实现录音,Uniapp实现麦克风权限管理与音频录制全流程,uni-app实战案例:实现H5页面麦克风权限获取与录音功能,uni-app音频录制,uniapp麦克风授权窗口,uniapp获取iOS麦克风权限,实现前端录音并播放,把音频传给后端接口处理,获取麦克风并实现录音功能,前端获取/切换麦克风播放采集音频和采集音量大小,前端调用麦克风实现

🏆 前端领域优质创作者 2981

android os夜间,Android夜间模式实现

查看我的全部开源项目【开源实验室】欢迎加入我的QQ群:【201055521】,本博客客户端下载【请点击】本文原创,转载请注明地址:http://blog.kymjs.com/最近在做一个Android夜间模式的功能,又重新研究了一下Theme机制。贯彻我的风格,以解决问题为目标,写了个小Demo,简单了实现了切换夜间模式,为大家讲解。在Activity中有一个方法叫setTheme(),可以设置A...

weixin_32570803的博客 124

「UG/NX」多功能dll集成一个dll的三种方法

C++多功能集成一个dll的三种方法。

何曾参静谧的博客 1390

Android实现夜间模式

最近研究了下安卓夜间模式的实现,发现没那么复杂,先打个草稿,待会写一下

魏成林的专栏 975

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android实现夜间模式_Android中的夜间模式实现

android实现夜间模式Easiest way to implement night mode in android. 在Android中实现夜间模式的最简单方法。 Android has recently introduced Dark theme from Android 10 which allows user to easily toggle between light/dark th...

weixin_26727575的博客 1344

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android studio夜间模式,android studio怎样实现夜间模式

满意答案noxlqub2016.05.01采纳率:51%等级:7已帮助:210人关于阅读类的app,有个夜间模式真是太重要了。那么有两种方式可以实现夜间模式1:修改theme,重启activity优点:正儿八经的夜间模式,配色看着舒服缺点:图片刺眼、闪屏2:使用一个带黑色带透明度的View,盖在现有的activity上,效果类似你带上墨镜,看着太阳不刺眼。优点:不用重启activity,不...

weixin_35709128的博客 2004

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android的Theme实现夜间模式

代码与技术       本文摘自:http://www.kymjs.com/darkTheme/ Android夜间模式实现 最近在做一个Android夜间模式的功能,又重新研究了一下Theme机制。贯彻我的风格,以解决问题为目标,写了个小Demo,简单了实现了切换夜间模式,为大家讲解。 最近在做一个Android夜间模式的功能,又重新研究了一下Theme机制。贯彻我的风格,以解

wblobin的博客 864

android自动夜间模式吗,Android夜间模式的实现方案

原标题:Android夜间模式的实现方案作者简介本篇来自 Sunlight1024的投稿,详细地讲解了关于Android应用的夜间模式的实现,希望大家喜欢!Sunlight1024的博客地址:http://blog.youkuaiyun.com/qq_20521573前言对于一款阅读类的软件,夜间模式是不可缺少的。最初看到这个需求时候觉得无从下手,没有一点头绪。后来通过查阅资料发现 Android 官方在 S...

weixin_31968831的博客 808

android自动夜间模式吗,Android夜间模式的几种实现

参考文章Android夜间模式的几种实现 我更倾向于第三种,简单直接,快速一、直接修改widget颜色,这种方式实现起来最简单,但需要每个控件都去修改,太过复杂。例如:/***相应交互,修改控件颜色*@paramview*/publicvoidonMethod1Click(Viewview){if(view.getId()==R.id.btn_me...

weixin_31032799的博客 287

Android 夜间模式实现

本次使用uiMode这种方式来实现~ 修改uimode是修改Configuration,这种主题切换只限于黑白模式,没有其他模式,不需要大量定义主题。 1,需要做哪些准备 2,如何实现 3,有哪些优缺点 一,需要做哪些准备 1,app的module 引入 implementation 'androidx.appcompat:appcompat:1.4.0' ,2,需要Activity须继承AppCompatActivity 3,清单文件 设置主题 Theme.AppCom

NewActivity的博客 5182

Android夜间模式实现

Android夜间模式实现 这个方案使用Support Library 23.2中新添加的夜间模式主题,并且可以向下兼容最低api 14的,基本满足绝大多数的手机。 Step 1: 需要 com.android.support:appcompat 23.2及以上的版本,我使用的androidx包下的版本,可以参考. 相关依赖加入: implementation 'androidx.appcom...

LiuShuaiQ的博客 697

android 8.1 夜间模式,android 快速实现夜间模式

最近项目中遇到了一个问题,夜间模式在8.0以上的手机中不起作用,查看了一下原因,是夜间模式实现方法的问题。分两种情况介绍一下先看一下运行效果:第一种 是目前项目中用到的,是以前的开发人员写的,存在一些问题(不兼容8.0以上的版本),已解决第二种是Support Library 中自带的一种方法。第一种:第一步 需要添加夜间模式资源,以-night为后缀日间模式 ...

weixin_36304806的博客 901

Android夜间模式的实现方案

对于一款阅读类的软件,夜间模式是不可缺少的。最初看到这个需求时候觉得无从下手,没有一点头绪。后来通过查阅资料发现Android官方在Support Library 23.2.0中已经加入了夜间主题。也就是只需要通过更换主题便可实现夜间模式的切换。下面截取项目实现的夜间模式效果图: 效果看起来非常nice,没有闪屏效果,过度看起来也比较平滑。那么如何实现夜间模式呢?下面将从以下几个方面来实现夜间

smily的博客 2万+
上一篇: Android 传感器用法
下一篇: Android 根据sql文件创建数据库并插入数据
deng_wei_csdn
博客等级 码龄10年 15粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值