MIUI状态栏时间居中教程

前言

  • 好久没输出点有价值的东西了。恰巧刚刚在酷市场看见有酷基在求助MIUI状态栏时间居中的问题,所以我们今天的主角就是它了。虽说算不上干货,不过也可以当做对 Android 布局的复习与巩固,希望给刚入Android开发坑的基友们一点帮助。
  • 本文侧重过程,旨在“授之以渔”,对市面上这类app的基本原理有一点了解。
  • 不保证我的文件与您的完全通用。不过思想和原理都是一样的。
  • 这里我提供了一个修改后的status_bar_simple.xml文件。它是文本形式,也就是并没有编译,因此您不能直接替换掉您对应的文件。如果实例环境与我的测试不同,请谨慎。不管如何,备份最重要。
    链接:百度网盘 https://pan.baidu.com/s/12lri3Xgin9lMLFzHsCKWdA 密码:a1i2
  • 预览图


    预览图

实现原理

  1. Android app大概可分为两部分:界面部分与逻辑部分。前者负责直接与用户交互,是整个app最直观的部分。而后者则负责处理前者传递过来的大量数据与事件,之后再展示给用户。
  2. Android 系统的状态栏由包名为 com.android.systemui 的app负责。它一般是 /system/priv-app/SystemUI/SystemUI.apk,其内部 layout/status_bar.xml 负责状态栏各个组件的布局。
  3. 我们仅仅修改这个布局文件就可以了,并不需要修改具体的 Java 层实现,因此有没有 odex 没有影响。

工具

  1. 已经 root 的 Android 手机一台。
  2. 支持查看并修改 zip 的app。
  3. 支持反编译与回编译的app。

测试环境

  • 机型:红米 Note4X 骁龙版
  • ROM:MIUI 9.2.1 稳定版
  • Android 版本:7.0
  • 工具:MT管理器点击下载

具体步骤

  1. 找到具体的apk。
    这一步应该没问题。需要注意的是,MIUI 把 SystemUI 放到了
    /system/priv-app/MiuiSystemUI/MiuiSystemUI.apk 而不是
    /system/priv-app/SystemUI/SystemUI.apk

  2. 找到布局文件。
    找到 layout/status_bar.xml。然而并没有发现负责时钟部分的组件
    com.android.systemui.statusbar.policy.Clock。不过这里我们发现了一处引用
    include layout="@layout/status_bar_simple.xml"。跟进并搜索
    com.android.systemui.statusbar.policy.Clock 发现需要修改的文件就是这个。

    对status_bar_simple.xml的引用

  3. 我们首先来分析一下这个布局文件。整个布局大约如图所示。
    原布局
  4. 我们需要把时钟的位置调到中央,即放到通知栏系统图标栏之间,所以新的布局结构如下图。

    时间居中的布局

  1. 打开MT管理器,把以下部分剪切掉:
<com.android.systemui.statusbar.policy.Clock
  android:textAppearance="@style/TextAppearance.StatusBar.Clock"
  android:gravity="center|start"
  android:id="@id/clock"
  android:paddingBottom="@dimen/statusbar_text_bottom_padding"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:singleLine="true"
  android:paddingStart="3dp"
  android:paddingEnd="3dp" />

搜索

<com.android.systemui.statusbar.phone.StatusBarIcons

并把上面的时钟部分剪切到这上面。

  1. 到这里其实还不够。因为这是个相对布局,我们得重新把组件的相对位置调整好,否则会出现混乱。
    找到刚刚你剪切好的是时钟部分,在
  android:id="@id/clock"

下面添加一行

  android:layout_centerInParent="true"

用来使时钟在父组件中央。

  1. 搜索
android:layout_toEndOf="@id/clock"

并删除。作用是取消通知图标在时钟右面。
注意:如果这一条后面存在>的话千万不要把 > 也删掉!否则会回编译失败。

  1. 经过上面几个步骤,如果仅仅要实现时间居中已经可以了。但这样的话如果没有通知时左侧会很不好看,光秃秃一片。所以下面的步骤是把 Wifi和信号 图标移动到左侧。布局结构如下
    移动信号图标后的布局
  1. 找到下面的信号部分
            <LinearLayout
                android:gravity="center_vertical"
                android:id="@id/signal_cluster_container"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:baselineAligned="false"
                android:layout_weight="1">
                <include
                    android:id="@id/signal_cluster"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    layout="@layout/signal_cluster_view" />
                <include
                    android:id="@id/signal_cluster2"
                    android:visibility="gone"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    layout="@layout/signal_cluster_view" />
            </LinearLayout>

android:layout_width="0dp"

改为

android:layout_width="wrap_content"

并删掉

android:baselineAligned="false"

之后把这一大块信号部分剪切掉。

  1. 找到
<LinearLayout
            android:gravity="center|start"
            android:id="@id/notification_icon_area"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" >

并把上面的信号部分剪切到这里上方。再在

            android:id="@id/notification_icon_area"

下添加一行

            android:layout_toEndOf="@id/signal_cluster_container"

完成后像下面这样子:

<LinearLayout
  android:gravity="center_vertical"
  android:id="@id/signal_cluster_container"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:layout_weight="1">
  <include
    android:id="@id/signal_cluster"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    layout="@layout/signal_cluster_view" />
  <include
    android:id="@id/signal_cluster2"
    android:visibility="gone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    layout="@layout/signal_cluster_view" />
</LinearLayout>
<LinearLayout
  android:gravity="center|start"
  android:id="@id/notification_icon_area"
  android:layout_toEndOf="@id/signal_cluster_container"
  android:layout_width="wrap_content"
  android:layout_height="match_parent" >
.........
  1. 其实经过上面的部分,我们的布局已经修改完成了。接下来就是右上角菜单,编译,在apk里更新文件。注意,如果直接在/system操作的话可能不会成功,建议先把这个apk移动到sdcard,操作后再覆盖回去。修改权限为0644,设置用户和组为root, root,重启生效。

感谢阅读

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,444评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,396评论 2 45
  • 雨疏风劲萧瑟冷, 归来即见触目景。 落花孤悬鲜犹在, 枝繁花盛顾自哀。 似闻花落骨碌声, 心生怜意念爱玲。 刚烈鲁...
    不惑流年阅读 331评论 0 0
  • DragonBall and Doraemon and Reborn! and more i guess
    keypad2049阅读 239评论 0 0
  • 输入框布局 在涉及注册登录等逻辑,往往会有输入框布局,不同的项目往往UI样式区别非常大,例如如下几种 总结起来就是...
    AnnaLeeYY阅读 568评论 0 0