打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于修改状态栏的教程,表达不好还望海涵
第一部分,关于代码的

我们首先看一下系统原代码:1,statu_bar.xml

<?xml version="1.0" encoding="utf-8"?>

<com.android.systemui.statusbar.phone.PhoneStatusBarView android:id="@id/status_bar" android:background="@drawable/status_bar_background" android:focusable="true" android:fitsSystemWindows="true" android:descendantFocusability="afterDescendants"

  xmlns:android="
http://schemas.android.com/apk/res/android">

    <com.android.systemui.TorchServiceView android:layout_gravity="top|left|center" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:foreground="#ff000000" />

    <com.android.systemui.statusbar.phone.BatteryIndicator android:layout_gravity="top" android:id="@id/battery_indicator" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/battery_indicator" android:scaleType="fitXY" />

    <com.android.systemui.statusbar.phone.BatteryIndicatorCharging android:layout_gravity="top|right|center" android:id="@id/battery_indicator_charging" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/battery_indicator_charging" />

    <ImageView android:id="@id/notification_lights_out" android:paddingLeft="6.0dip" android:paddingBottom="2.0dip" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" />

   1 <LinearLayout android:orientation="horizontal" android:id="@id/icons" android:paddingLeft="6.0dip" android:paddingRight="6.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent">

   1. 1   <LinearLayout android:paddingRight="6.0dip" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0">

            <TextView android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:id="@id/carrier" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />

            <LinearLayout android:id="@id/notification_icon_area" android:layout_width="wrap_content" android:layout_height="fill_parent">

                <com.android.systemui.statusbar.StatusBarIconView android:id="@id/moreIcon" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/stat_notify_more" />

                <com.android.systemui.statusbar.phone.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="wrap_content" android:layout_height="fill_parent" />

            </LinearLayout>

1.1  </LinearLayout>

        <com.android.systemui.statusbar.NetworkSpeedView android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="right|center" android:id="@id/network_speed_view" android:visibility="gone" android:layout_width="@dimen/status_bar_network_speed_width" android:layout_height="fill_parent" android:layout_marginRight="4.0dip" />

        <LinearLayout android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/statusIcons" android:layout_width="wrap_content" android:layout_height="fill_parent" />

    1.2    <LinearLayout android:gravity="center" android:orientation="horizontal" android:id="@id/signal_battery_cluster" android:layout_width="wrap_content" android:layout_height="fill_parent">

            <include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />

            <com.android.systemui.statusbar.phone.BatteryStatusIconView android:id="@id/battery" android:layout_width="wrap_content" android:layout_height="wrap_content" />

    1.2    </LinearLayout>

            <com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:id="@id/clock" android:paddingTop="1.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />

  1 </LinearLayout>


当然,这个代码还没结束,只是前面一部分,但是我们只需要关注前面一部分就可以了。起始行和结束行,我分别用同样的颜色标注。从颜色标注,我们可以看到这段代码大体框架。

这段代码就是描述状态栏的,1为一个框架,1这个框架里面包含1.1  1.2两个主要框架以及时间等次要框架。

具体怎么看框架里面的内容,我现在开始描述。大家或多或少都懂点英文,但是,如果只懂一点点和我一样的话,那么很容易被迷惑。每一行代码具体是描述什么的,要看android:id=""这个单词的内容。于是我们可以容易看出1.1第一句text部分是描述运营商的,橙色区域是描述通知图标等内容。1.2前面那部分是描述网速,网速后面跟着的是闹钟蓝牙等图标。1.2是描述信号,以及电池。1.2后面部分是描述时钟。

这样,整体布局我们就能看出来了。

至于没一句里面的代码,用法,需要注意的,其实我懂得的也不多。我大概知道 gravity=是子组件位置,比如gravity=center意思是居中。gravity= 和 layout gravity=的区别是前者是内容居中,后者是位置相对于父组件居中。具体想了解更多,还是问百度。我只是写一个简单教程让大家理解,方便大家研究,给大家铺路。我没有把握完全教会大家。

每个代码的用法,网上都可以百度的到。

然后我给大家讲一下我的思路,也许你有更好的思路。但是我的思路只是供给你参考。是我最新代码的思路。

要想完美更改,就需要重新布局。之前很多人做过时间居中补丁。但是我看过,那个只是把时间单独提出来作为一个独立框架,并行于总框架。居中是没问题,可能有通知之类的会有重影。按照我的思路居中的话,不会重影。图标多到一定数量到达相关位置会变成省略号。

我的构思是重新布局,时间不要提出来,放到正中。这中间就会涉及一个比例问题,如果不做比例的话,就会变成这个样子:











虽然你代码写居中了,但是时间居中不了。所以要做比例。

我的构思是,把1.1 和1.2做成相同比例,然后时间放中间。这样就不会出差错了。

大家看这一句:

   1. 1   <LinearLayout android:paddingRight="6.0dip" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0">

其中,layout_weight=“1.0”就是表示比例的。数值越小,优先级越大。昨天我做测试的时候,在这里

1.2    <LinearLayout android:gravity="center" android:orientation="horizontal" android:id="@id/signal_battery_cluster" android:layout_width="wrap_content" android:layout_height="fill_parent">

加入了layout_weight="1.0",但是没用,结果变成这个样子:











所以在使用layout_weight=比例的时候,要注意,layout_width="wrap_conten"改成layout_width="0dip"这样才能保持比例。

相对这些来说,信号居左就简单多了。我们把1.2里面的id=signal_cluster_view 这部分内容提取出来,放到1.1里面,提取的时候注意不要破坏语法结构。这样,信号就放到左边了。同时为了保持比例,除了时间放到1.1  1.2中间,其他的 左边的放到左边框架里,右边的放到右边的框架里。那么布局就完成了。下面我放出我修改后的代码给大家对比参详:

<?xml version="1.0" encoding="utf-8"?>

<com.android.systemui.statusbar.phone.PhoneStatusBarView android:id="@id/status_bar" android:background="@drawable/status_bar_background" android:focusable="true" android:fitsSystemWindows="true" android:descendantFocusability="afterDescendants"

  xmlns:android="
http://schemas.android.com/apk/res/android">

    <com.android.systemui.TorchServiceView android:layout_gravity="top|left|center" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:foreground="#ff000000" />

    <com.android.systemui.statusbar.phone.BatteryIndicator android:layout_gravity="top" android:id="@id/battery_indicator" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/battery_indicator" android:scaleType="fitXY" />

    <com.android.systemui.statusbar.phone.BatteryIndicatorCharging android:layout_gravity="top|right|center" android:id="@id/battery_indicator_charging" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/battery_indicator_charging" />

    <ImageView android:id="@id/notification_lights_out" android:paddingLeft="6.0dip" android:paddingBottom="2.0dip" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" />

    1<LinearLayout android:orientation="horizontal" android:id="@id/icons" android:paddingLeft="6.0dip" android:paddingRight="6.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent">

        1.1<LinearLayout android:gravity="left" android:paddingRight="6.0dip" android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="1.0">

            <LinearLayout android:gravity="left" android:id="@id/signal_battery_cluster" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent">

      <include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />

      </LinearLayout>

            <LinearLayout android:id="@id/notification_icon_area" android:layout_width="wrap_content" android:layout_height="fill_parent">

                <com.android.systemui.statusbar.StatusBarIconView android:id="@id/moreIcon" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/stat_notify_more" />

                <com.android.systemui.statusbar.phone.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="wrap_content" android:layout_height="fill_parent" />

            </LinearLayout>

       </LinearLayout>

     1.2 <LinearLayout android:layout_gravity="center" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent">

<com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="center" android:id="@id/clock" android:paddingTop="1.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />

       </LinearLayout>

    1.3 <LinearLayout android:gravity="right" android:orientation="horizontal" android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="1.0">
        <com.android.systemui.statusbar.NetworkSpeedView android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="right|center" android:id="@id/network_speed_view" android:visibility="gone" android:layout_width="@dimen/status_bar_network_speed_width" android:layout_height="fill_parent" android:layout_marginRight="4.0dip" />

        <LinearLayout android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/statusIcons" android:layout_width="wrap_content" android:layout_height="fill_parent" />

        <com.android.systemui.statusbar.phone.BatteryStatusIconView android:id="@id/battery" android:layout_width="wrap_content" android:layout_height="wrap_content" />

       </LinearLayout>

    1</LinearLayout>

大家可以看到,我的代码之中,而是把整个状态栏分成三个布局。然后把每个元素嵌入到里面。其实这些东西之所以难,主要一个是结构,对于我们这些新手来说,看不懂,看懂了也就好说了。另外一个,就是注意语法。语法是最关键的,但是这里面涉及太多,一个教程写不完。而我们的目的只是学会改。最简单应该知道的语法错误不要犯的就是,代码通常 不论以什么开始,结束时必然要有"/"。 如果没有,那么语法不完整。一行最后有"/"那么这一行本身就是一句完整代码。如果没有“/”,那么我们就要找下一个"/"在哪,找到了,可能一句,可能两句也可能下一个“/”在好几个完整语句的后面,所以这个是首先注意不要犯的错误。

把结构弄明白了 ,每句代码大概知道是干什么的,然后把握关键词,比如gratity=是关于位置的,比如paddingRight="6.0dip"是距离右边6个像素的位置等等。这些就问百度。不要让这些驳杂的东西占据教程,不然你们也没耐心看完。

我然后我再说一个就是,大家仔细看就会注意到,我的代码里少了一句:

            <TextView android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:id="@id/carrier" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />

这一句是描述运营商的,那么为什么少了这一句呢?我的运营商跑哪了?这就涉及到另一个问题。如果放着这一句,那么,信号是居左了,wifi一样还是在信号左边,不会跑到运营商旁边,达不到我们想要的效果。如果要wifi放到运营商右边,我们还需要修改signal_cluster_view.xml这个文件。这个文件是关于信号。我们要想wifi在运营商右边,就需要把运营商放到信号里面作为一只整体。

具体怎么修改,相信大家如果认真仔细看完并且理解了我前面的内容,那么你就知道怎么改了。为了方便大家研究,我把系统源码和我修改后的代码做成附件给大家研究。







系统源码.rar

(1.85 KB, 下载次数: 219)














修改代码.rar

(1.94 KB, 下载次数: 484)






大家解压缩两个文件,修改代码我没改文件名,1是修改statu_bar.xml的代码,2是修改signal_cluster_view.xml的。代码只是给你们参详的 ,不是让你们直接拿去使用的,如果直接拿去使用遇到任何BUG ,本作者不负任何责任。因为教程我已经写了。另外,我也说了,我写教程只是铺路,每个人理解多少,是你们自己的造化。我也是新手。而且这里面涉及内容太多,根本无法写出一篇完整的让每个人都明白的教程。

你们自己需要做的就是去百度语法,修改位置的时候不要出错。



代码做完剩下的就是反编译了 。



本来反编译如果不明白的你们应该百度 ,毕竟每个人用的软件不一样。所以教程也不一样。但是我怕被人喷,最郁闷的就是我们这些人辛苦研究点东西分享,但是哪里分享的不全面就会被喷。



反编译我就简单说几点注意的,反编译的时候注意加载framework-res.apk 和framework-miui-res.apk。











回编译后,反编译的miuisystemui文件夹里有个dist文件夹,那里面的apk才是回编译好的。但是回编译的不能直接使用 ,要把里面修改过的xml文件和recources.arsc替换到没有反编译过的里面。然后用修改过原miuisystemui.apk这个才是补丁











替换用zip打开两个apk文件,用回编过的拖到未编过的,压缩方式选择存储。



回编失败检查是否代码有问题,如果没问题,就检查是否其他问题。这里建议大家修改以前测试一下反编译不做任何修改能否回编成功。



最后再总结说一句,我的教程,不能帮助大家完全学会,只能帮助大家更容易的理解看懂代码。并且用我成功的案例,带给你们经验给你们参详。你们所要做的就是百度语法结构,注意修改时不要出错。毕竟我从完全不会,到学做主题到现在学会代码 ,也全靠论坛,百度更多的还是自己的琢磨。大神们时间精力有限,也只能提供很少的帮助给我。但是我还是研究会了。我能做到的,相信你们也能做到。



最后,发个广告。我的新军迷和低调上线了,一款收费一款免费,还请大家支持。虽然我当时发布的时候说是米2专用,但是审核组不允许,一再审核失败,又不断修改完善。结果专用主题,其实兼容其他机型。



相信大家学会并且理解我的教程后,也许很快,你们发挥你们的想象力,论坛会出现各种各样的状态栏秀了。





本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android 设置页面UI设计
LinearLayout和RelativeLayout 比较
模仿UCweb菜单 - 白羽雕弓 - 博客园
自定义PreferenceActivity——修改Preference样式、加顶部布局
求教android实现短信图标右上角添加数字的问题。。跪求大神。。。
AndroidUI设计之 布局管理器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服