精华内容
下载资源
问答
  • 4.2.2手机系统任务栏透明+自定义背景图片,修改电量图标风格数据监控风格等
  • 关于动态修改系统状态栏背景、字体和图标颜色,以及动态显示或隐藏系统状态栏,一直都是都是许多项目的常规需求。但是,由于不同版本间的兼容性差异,网上的实现方法多种多样。并且,许多方法都会存在这样、那样的...

    关于动态修改系统状态栏背景、字体和图标颜色,以及动态显示或隐藏系统状态栏,一直都是都是许多项目的常规需求。但是,由于不同版本间的兼容性差异,网上的实现方法多种多样。并且,许多方法都会存在这样、那样的不足。使用麻烦不说,一不小心还会产生各种异常,令人得不偿失。

    这里,我们希望使用一个统一、简洁的方法,实现一键修改系统状态栏背景和文字颜色。以及动态的控制系统状态栏的显示或隐藏。

    知识储备:安卓在5.0之前,并没有提供可以修改系统状态栏背景色的方法,而在6.0之前,也没有提供修改状态栏文字和图标颜色的方法。另外,国内某些厂商,如小米、魅族等修改了官方API,可能导致修改方法无效等。

    因此,要想修改系统状态栏背景色,我们需要系统在5.0以上,而需要修改状态栏文字和图标颜色,则需要系统在6.0以上。这里建议向上兼容,即只有系统在6.0以上才允许动态修改系统状态栏,否则如果5.0的设备将状态栏北京改为白色,而字体颜色无法修改,默认也是白色。那就无法看见了。好在随着安卓系统的不断更新,目前6.0以上系统的覆盖率已经达到90%以上,所以即使无法做到完全覆盖,我们也可以确保绝大部分的用户体验。

    下面是具体方案:

    1.设置状态栏的背景颜色

    // 设置状态栏底色颜色
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().setStatusBarColor(parseColor);

    方法非常简单,这个背景色可以设置为任意颜色值,并且可以在任何时刻修改。需要注意的是API必须是5.0以上才有用哦。

    2.设置状态栏文字和图标颜色

    文字和图标颜色并不能设置为任意颜色,他只有两种选择:亮色系(文字和图标颜色为黑灰色)和暗色系(文字和图标颜色为白色)

    根据我们设置的状态栏背景色,我们需要动态修改文字和图标颜色,以保证它们能被看清。例如,当背景色为白色时,我们采用亮色系,当背景色为黑色时,我们采用暗色系。那么问题来了,我的程序怎么知道这个时候该采用哪种色系呢?如果靠人工判断那也太麻烦了。

    别慌,官方为我们提供了一个判断方法:

    ColorUtils.calculateLuminance(parseColor)

    返回值的取值范围为0.0-1.0 当大于0.5时,我们就可以认为当前颜色为亮色系,需要将文字和图标颜色设置为黑灰色;反之,则将文字和图标颜色设置为白色。设置的方法也非常简单:

    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//亮色系,将文字和图标颜色设置为黑灰色
    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);//暗色系,将文字和图标颜色设置为白色

    这下就大功告成了吗?别急,上面我们说了国内某些厂商,如小米、魅族等修改了官方API,我们会发现这两个方法在小米和魅族的部分机型上会显示无效果。需要针对性的做出兼容处理。

    //小米手机兼容处理,修改系统状态栏文字和图标颜色
    Class clazz = window.getClass();
    try {
        int darkModeFlag = 0;
        Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
        Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
        darkModeFlag = field.getInt(layoutParams);
        Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
        if (dark) {
            extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体
        } else {
            extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体,使用默认白色字体
        }
        result = true;
    } catch (Exception e) {
    
    }

    //魅族手机兼容处理,修改系统状态栏文字和图标颜色

    try {
        WindowManager.LayoutParams lp = window.getAttributes();
        Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
        Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");
        darkFlag.setAccessible(true);
        meizuFlags.setAccessible(true);
        int bit = darkFlag.getInt(null);
        int value = meizuFlags.getInt(lp);
        if (dark) {
            value |= bit;
        } else {
            value &= ~bit;
        }
        meizuFlags.setInt(lp, value);
        window.setAttributes(lp);
        result = true;
    } catch (Exception e) {
    
    }

    这是网上找到的修改方法,亲测好用。

    那么,我们的完整动态修改系统状态栏背景和文字颜色方法如下:

    /*设置状态栏颜色和文字颜色,小米,魅族需要自定义,比较坑爹*/
    public static void setColor(Window window, int parseColor) {
        // 操作系统的api版本大于21,才能改变状态栏的颜色,api版本大于23,才能改变状态栏文字颜色
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            try {
                // 设置状态栏底色颜色
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                window.setStatusBarColor(parseColor);
                // 如果亮色,设置状态栏文字为黑色
                boolean dark = ColorUtils.calculateLuminance(parseColor) >= 0.5;
                if(MIUISetStatusBarLightMode(window,dark)){
                    //小米的设置成功
                    /*Logger.e("setColor","小米手机,设置成功");*/
                }else if(FlymeSetStatusBarLightMode(window,dark)){
                    //魅族的设置成功
                    /*Logger.e("setColor","魅族手机,设置成功");*/
                }else{
                    if (ColorUtils.calculateLuminance(parseColor) >= 0.5) {
                        window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                    } else {
                        window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 小米MIUI系统 亲测好用
     *
     * @param window
     * @param dark
     * @return
     */
    public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) {
        boolean result = false;
        if (window != null) {
            Class clazz = window.getClass();
            try {
                int darkModeFlag = 0;
                Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
                Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
                darkModeFlag = field.getInt(layoutParams);
                Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
                if (dark) {
                    extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体
                } else {
                    extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体
                }
                result = true;
            } catch (Exception e) {
    
            }
        }
        return result;
    }
    
    /**
     * 设置状态栏图标为深色和魅族特定的文字风格
     * 可以用来判断是否为Flyme用户
     *
     * @param window 需要设置的窗口
     * @param dark   是否把状态栏字体及图标颜色设置为深色
     * @return boolean 成功执行返回true
     */
    public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {
        boolean result = false;
        if (window != null) {
            try {
                WindowManager.LayoutParams lp = window.getAttributes();
                Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
                Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");
                darkFlag.setAccessible(true);
                meizuFlags.setAccessible(true);
                int bit = darkFlag.getInt(null);
                int value = meizuFlags.getInt(lp);
                if (dark) {
                    value |= bit;
                } else {
                    value &= ~bit;
                }
                meizuFlags.setInt(lp, value);
                window.setAttributes(lp);
                result = true;
            } catch (Exception e) {
    
            }
        }
        return result;
    }

    建议将以上方法放到你的工具类里,具体界面调用时只需一行代码就可以搞定了。

    ToolsUtil.setColor(mContext.getWindow(), Color.WHITE);

    至于动态控制系统状态栏的显示或隐藏。也很简单:

    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN);//隐藏状态栏

    动态显示状态栏直接用上面提到的的ToolsUtil.setColor方法,就可以一并实现了。

    补充PS:至于网上说的那种沉浸式状态栏,由于需要调整布局,所以使用起来没这么简单,建议如非必要,不要这么做。具体方法给出如下:

    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);//设置沉浸模式
    getWindow().setStatusBarColor(Color.TRANSPARENT);//设置状态栏背景透明
    //需要调整布局,为状态栏显示预留出空间

    再次补充PS:还有一种随滑动手势实现状态栏颜色渐变的需求,本文没有提到。不过谷歌已经提供了很好的解决方案,CoordinatorLayout,有兴趣的可以自行百度一下。本文不做细讲,我们只说一下,什么时候去修改状态栏里的文字和图标颜色。

    我们只需要监听AppBarLayout的onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset)方法,根据偏移量verticalOffset的值,动态设定状态栏里的文字和图标颜色即可。

     

     

     

     

     

     

     

    展开全文
  • 添加网站全局背景图片显示:背景图片颜色属性(background-color)设置一种纯色背景,它会覆盖填充素内容。背景图片属性(background-image)这个属性是设置HTML元素背景图片,相当于background属性一样。背景图片属性...

    添加网站全局背景图片显示:

    背景图片颜色属性(background-color)

    设置一种纯色背景,它会覆盖填充素内容。

    背景图片属性(background-image)

    这个属性是设置HTML元素背景图片,相当于background属性一样。

    背景图片属性(background-repeat:)

    定义图片的平铺模式,默认值为repeat图片在水平和垂直方向重复显示。

    repeat-x : 图片延x轴水平平铺显示

    repeat-y: 图片延y轴垂直平铺显示

    no-repeat: 图片不平铺

    它可以设置百分百%,也可以设置具体长度px

    图片滚动显示 (background-attachment:)

    默认值为scroll: 随着鼠标滚动而滚动

    fixed: 不滚动

    实现方法:在sytle样式添加body{},设置背景图片属性。

    html>

    背景图片

    .huawei {

    text-align: center;

    text-shadow: 10px 20px 20px pink;

    /* background-color: red ; */

    }

    body {

    background: url(5-13050GTF9-50.png) center;

    background-repeat: no-repeat;

    background-size: cover;

    background-attachment: fixed;

    }

    华为云计算

    华为云用在线的方式将华为30多年在ICT基础设施领域的技术积累和产品解决方案开放给客户

     致力于提供稳定可靠、安全可信、可持续创新的云服务,

    做智能世界的“黑土地”,推进实现“用得起、用得好、用得放心”的普惠AI。

    华为云作为底座,为华为全栈全场景AI战略提供强大的算力平台和更易用的开发平台。

    效果图:

    fe5f865d6be723f7aa6871d5d1d1e348.png

    展开全文
  • 修改手机状态栏背景颜色

    千次阅读 2015-09-24 22:43:12
    Android 系统自4.2 开始 UI 上就没多大改变,4.4 也只是增加了透明状态栏与导航栏的功能,如图 左边为 4.2.2 右边为 4.4.2   那么现在我就来给大家讲解下如何使用这个新特性,让你的 app 跟随潮流,当然如果...

    转载自:http://www.apkbus.com/android-163388-1-1.html


    Android 系统自4.2 开始 UI 上就没多大改变,4.4 也只是增加了透明状态栏与导航栏的功能,如图

    左边为 4.2.2 右边为 4.4.2
            


    那么现在我就来给大家讲解下如何使用这个新特性,让你的 app 跟随潮流,当然如果你不在乎外观就算了,
    使用这个特性能开发出很漂亮的UI,尤其对于 google 原生系统,屏幕下方的导航栏白白占据一块屏幕空间,看起来很不爽



    图为 sommth 客户端,

    OK废话不多讲,开始讲技术吧, 第一种方法,在代码设置:
    1. if(VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
    2.                                 //透明状态栏
    3.                                 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    4.                                 //透明导航栏
    5.                                 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    6.                         }
    复制代码
    直接调用上面2行代码可以透明,但是你会发现你的 view 跑到 actionbar 上面去了,很明显 google 的意图是使你的 view 可以占据整个屏幕,然后 状态栏和导航栏 透明覆盖在上面很明显这样不可行。
    那有没有办法使你的 view 保持原来大小呢?
    有,你需要在这个 activity 的 layout xml 文件添加两个属性
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2.     android:layout_width="fill_parent"
    3.     android:layout_height="fill_parent"
    4.     android:gravity="center_horizontal"
    5.    
    6.     android:fitsSystemWindows="true"
    7.     android:clipToPadding="true"
    8.    
    9.     android:orientation="vertical" >
    复制代码
    这样状态栏的背景就是你的 activity 的主背景,倘若actionbar 在,将会很难看,如图:

    事实证明,google 并没有提供一个比较好的解决方案,他的 透明状态栏与导航栏的应用局限于,全屏阅读文字或玩游戏那种情景,


    第二种方式,是是设置 theme 属性

    1. android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor"
    2.             android:theme="@android:style/Theme.Holo.Light.NoActionBar.TranslucentDecor"
    3.             android:theme="@android:style/Theme.Holo.NoActionBar.TranslucentDecor"
    复制代码
    如果你使用自定主题,只需在在 values-19 文件添加以下属性:
    1. <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">

    2.         <!-- API 19 theme customizations can go here. -->
    3.         <item name="android:windowTranslucentStatus">true</item>
    4.         <item name="android:windowTranslucentNavigation">true</item>
    5.     </style>
    复制代码

    刚刚说了这个使用有局限性,不过好在有一个开源的东西
    https://github.com/jgilfelt/SystemBarTint
    可以设置 statusbar 背景,原理是在 Window 的 DocView 添加 view,大家可以下载这个项目学习如何使用
    SystemBarTint-master.zip(513.74 KB, 下载次数: 1892)
    展开全文
  • 1、在drawable里面书写欢迎页面的背景splash_bg文件 &amp;amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;utf-8&amp;amp;quot;?&amp;amp;amp;gt; &...

    1、在drawable里面书写欢迎页面的背景splash_bg文件

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <color android:color="@color/black" />
        </item>
        <item>
            <bitmap
                android:dither="true"
                android:filter="true"
                android:gravity="fill"
                android:src="@drawable/welcome"
                android:tileMode="disabled" />
        </item>
    
    </layer-list>

    其中gravity为图片在window中的位置,color为应用的主题颜色

    2、在style里面书写欢迎页的主题

     <!-- 欢迎界面主题 -->
        <style name="WelcomeTheme" >
        <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>
            <item name="android:windowFullscreen">true</item>
            <item name="android:background">@drawable/splash_bg</item>
        </style>

    3、在Manifest里面引用该主题

    <activity
                android:name=".main.activity.WelcomeActivity"
                android:theme="@style/WelcomeTheme">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                    <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
                </intent-filter>
            </activity>

    额外:设置(虚拟按键)NavigationBar的颜色

     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowTranslucentStatus">false</item>
            <item name="android:windowTranslucentNavigation">false</item>
            <!--&lt;!&ndash;Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色&ndash;&gt;-->
            <!--&lt;!&ndash; 可以修改状态栏的颜色 -->
            <item name="android:statusBarColor">@color/color_main</item>
        </style>
    展开全文
  • 因为只有6.0以上的系统才支持状态栏字体颜色的设置,6.0一下的部分手机可通过修改系统源码来进行设置如小米,魅族。import android.annotation.TargetApi; import android.app.Activity; import android.content....
  • Android修改系统默认设置

    千次阅读 2017-06-14 17:28:09
    修改workspace的字体大小: 如果没有就添加:   name="WorkspaceIcon.Landscape">   name=" android :textSize">13sp     6、加wallpaper: 1.  加wallpaper的名字 2. ...
  • 然后运行在魅族,红米,华为手机上都没问题,都能正常的突出按钮(其中魅族手机和华为手机都是5.0以上的系统),但是把Demo原代码放到androidStudio的项目里面后,问题出现了,本来设置dialog的背景为透明的,结果...
  • WM PPC手机自带的短信背景图和目前网上有些CAB包的短信背景图片太单调了,更换不了,现在教大家自己动手制作个性的短信背景图片,简单实用,想换就换.   第一步: <br />首先与PC电脑同步,在...
  • 今天我女朋友把手机把一张手机背景照片原稿删了,又没有备份。这下我遭殃了 非要我把这张照片弄出来,弄不出来...因为在设置背景系统复制的原件的副本隐藏于手机中。 以下android代码 把背景图片保存在/sdcard/Booh
  • 然而,对于国内大品牌手机来说,在系统的权限和其他提示性控件的显示问题上,这些手机系统的开发人员会加上很多限制和修改。比如对于华为手机,吐司是不能正常展示的,并且在popupwindow弹出后背景变暗这方面,华为...
  • 系统栏系列之背景图片侵入系统

    千次阅读 2016-09-01 18:57:08
    在Andorra 4.4系统之上的手机实现应用背景图片侵入系统栏效果。即,透明的状态栏和导航栏。
  • //设置系统状态栏处于可见状态 window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); //让view不根据系统窗口来调整自己的布局 ViewGroup mContentView = (ViewGroup) window...
  • ecshop后台系统设置-商店设置详解

    千次阅读 2015-05-14 17:26:06
    今天为大家详细解说一下 系统设置-商店设置 里的所有内容与模块作用。 商店设置是ecshop新用户第一步先要设置的地方,因为里面相当于网站的基础。包括公司名称,电话,地址,tittle等重要的信息都是这里修改,...
  • parent属性定义了是否显示actionbar,我这里设置的不显示。colorPrimaryDark属性定义了状态栏颜色,navigationBarColor定义了底部导航栏颜色。 这是我们的color文件: 给一个示例效果:
  • 二、 3G版的界面具有 “皮肤更换”功能,手机用户可以根据自己的喜好改变手机网站页面的颜色,风格等,同时还增加了多媒体支持(背景音乐的播放,老的WAP版没有此功能)。 三、 3G版另外的一个特点是 实现PC普通...
  • Android基础入门教程——1.1 背景相关与系统架构分析标签: Android基础入门教程1.Android背景与当前的状况Android系统是由Andy Rubin创建的,后来被Google收购了;最早的版本是:Android 1.1版本 而现在最新的版本...
  • Android设置窗口的背景

    千次阅读 2018-11-12 19:08:15
    Android设置窗口的背景
  • Android framework系统默认设置修改

    千次阅读 2014-10-29 10:23:11
    修改workspace的字体大小: 如果没有就添加:   name="WorkspaceIcon.Landscape">   name="android:textSize">13sp     6、加wallpaper: 1.  加wallpaper的名字 ...
  • 二、 3G版的界面具有 “皮肤更换”功能,手机用户可以根据自己的喜好改变手机网站页面的颜色,风格等,同时还增加了多媒体支持(背景音乐的播放,老的WAP版没有此功能)。 三、 3G版另外的一个特点是 实现PC普通...
  • 在单个Activity里面,设置状态栏的背景: 1、在Activity的布局根文件中添加属性: android:fitsSystemWindows="true" //不设置此属性,标题栏和系统状态栏会重叠 2、将第三方核心代码类 SystemBarTintManager ...
  • 可以对手机信息的添加,删除、修改、查询,可以对软件背景颜色,字体的设置。也可以设置系统时间。修改系统扇区。适合c++学着学习使用。一个不错的程序哦。不要错过。
  • 给浏览器设置一个图片背景/主题

    万次阅读 多人点赞 2019-06-29 23:31:49
    那么,今天,我给大家带来的是给你的火狐/谷歌浏览器设置一个图片背景。 先上一张效果图: 实现步骤: 1.先在你的谷歌or火狐浏览器的插件商城里面搜索安装stylish插件(谷歌浏览器需要科学上网) 如图选择第一个...
  • 最近做了项目上的需求,就是在设备锁屏之后,要恢复一下系统默认的壁纸。。。 很明显如果想要修改系统锁屏壁纸,需要用到这个类 WallpaperManager
  • 对于按键在屏幕内部的机型,因为虚拟按键也是屏幕内容的一部分,它也实际占据屏幕一定的高度,在系统应用中虚拟按键默认呈现的都是透明的背景色,但是在用户应用中如果未设置虚拟按键的背景颜色,它默认呈现的多为黑色。...
  • 模板、扫码打赏插件、手机版与电脑版智能管理插件、屏蔽复制与鼠标右键插件、老y文章系统数据迁移至天人工具、OK3W文章系统数据迁移至天人工具、用户注册后自动登录插件、悬浮贴边客服插件、会员前台全功能编辑器...
  • 14、告别注册机:验证码可设置中文验证码,数字求和,颜色,英文数字自由搭配的选择设置,以及图案干扰背景设置 (设置干扰点数值,干扰线数值),可限制单个地区或IP发贴限制,更改信息发布文件名以及会员注册...
  • 在制作App的闪屏页时如果你仔细观察就会发现,每次你在手机桌面点击图标启动应用时会先出现一个白色背景(也就是我们通常所说...解决的方法很简单,就是在SplashActivity的主题中将背景设置成给闪屏页一样的图片: ...
  • 未解决之前: 解决 代码: html,body{ margin:0; padding:0; outline:none; list-style:none; width:100%; height: 100%; background: #012145; font-family:"... /*overflow-x: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,705
精华内容 18,282
关键字:

修改手机系统设置的背景