上图:
(我把上图称为图-1)
首先把framework-res.apk设置为框架,然后反编译SystemUI.apk,打开SystemUI\res\layout路径下的status_bar.xml这个文件,这个主要定义状态栏,什么状态栏透明,时间居中,状态栏运营商等等,都在这里实现,接下来说一下这个文件里面主要的东西:
<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.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" />
通知图标:就是左边USB调试那一堆图标。
<include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />
信号图标:wifi,信号.
<ImageView android:id="@id/battery" android:paddingLeft="4.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" />
电池图标
<com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:layout_gravity="center_horizontal" android:id="@id/clock" android:paddingLeft="6.0dip" android:layout_height="fill_parent" android:singleLine="true" />
时钟图标
如果大家要弄时间居中什么的就找一下耗子大的贴,我说一下上面这图的状态栏是如何实现的:
如下图,左边是原文件,右边是我修改过的文件(显示红色是因为左边没有,而右边有或者右边没有,而左边有,甚至两边都有,但是代码不同,意思就是两边的代码存在的差异对比)
我先说一下右边,右边第一条红色的代码,是:
<com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:layout_gravity="center_horizontal" android:id="@id/clock" android:paddingLeft="6.0dip" android:layout_height="fill_parent" android:singleLine="true" />
也就是说这个是时钟的代码,而我弄了时间居中,是在
android:paddingLeft="6.0dip" android:layout_height="fill_parent"
之间加入了
android:layout_width="wrap_content"
变成了
android:paddingLeft="6.0dip" 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" />
上面说过了,这个是wifi和信号的图标,定义信号图标这段代码原本是在定义电池图标的那段代码上面的,也就是:
<ImageView android:id="@id/battery" android:paddingLeft="4.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" />
这个是电池图标的代码
而我现在为了实现信号居左,把定义信号图标这段代码移动到:
<LinearLayout android:orientation="horizontal" android:id="@id/notification_icon_area" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0">
这段代码下面,从而出现了右边第二条红色代码。
左边第一条红色代码,是:
<com.android.systemui.statusbar.phone.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" />
而这段代码,前面也说过,是通知图标,而我现在把USB调试的图标移动到电池隔壁(图-1),所以我要把这段代码移动到电池图标代码的上面,从而出现了左边的第二条的红色代码和右边第三条红色代码,因为那段代码原来是信号图标,而右边被我修改成通知图标,所以两段代码已经是不一样了。
最后,看左边第三条红色代码,这个是时间图标的代码,也就是右边第一条红色代码,,为了实现时间居中,位置互换了,所以显示了红色
修改到这里,基本上已经跟图-1差不多了,但是这是的信号图标是wifi图标在前,信号图标在后,如何把信号图标弄去前面呢?
打开同意目录下的signal_cluster_view.xml这个文件,这个文件主要是定义wifi和信号的,
如下图:
依旧左边是原文件,右边是修改过的,到底修改了什么呢?
就是把前面定义wifi的几段代码(也就是左边的红色部分):
<FrameLayout android:id="@id/wifi_combo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="-6.0dip">
<ImageView android:id="@id/wifi_signal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:layout_alignParentRight="true" android:layout_centerVertical="true" />
<ImageView android:layout_gravity="bottom|center" android:id="@id/wifi_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</FrameLayout>
<View android:id="@id/spacer" android:visibility="gone" android:layout_width="6.0dip" android:layout_height="6.0dip" />
剪切到:
<ImageView android:id="@id/airplane" android:layout_width="wrap_content" android:layout_height="wrap_content" />
这段代码下面,因为定义wifi下面的那段代码是定义信号的,所以不用动,顺便把:
<ImageView android:layout_gravity="bottom|right|center" android:id="@id/mobile_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
这段代码里面的right|删掉,变成:
<ImageView android:layout_gravity="bottom|center" android:id="@id/mobile_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
到这里就大功告成了,回编译之后把resources.arsc,signal_cluster_view.xml和status_bar.xml用WinRAR的存储模式替换会原来的APK,我在下面给两个文件给你们对比,你们可以下载一个叫Beyond Compare 3的软件进行对比,看看应该如何修改过,但一定要自己动手,这样才有用!!!
(我把上图称为图-1)
首先把framework-res.apk设置为框架,然后反编译SystemUI.apk,打开SystemUI\res\layout路径下的status_bar.xml这个文件,这个主要定义状态栏,什么状态栏透明,时间居中,状态栏运营商等等,都在这里实现,接下来说一下这个文件里面主要的东西:
<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.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" />
通知图标:就是左边USB调试那一堆图标。
<include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />
信号图标:wifi,信号.
<ImageView android:id="@id/battery" android:paddingLeft="4.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" />
电池图标
<com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:layout_gravity="center_horizontal" android:id="@id/clock" android:paddingLeft="6.0dip" android:layout_height="fill_parent" android:singleLine="true" />
时钟图标
如果大家要弄时间居中什么的就找一下耗子大的贴,我说一下上面这图的状态栏是如何实现的:
如下图,左边是原文件,右边是我修改过的文件(显示红色是因为左边没有,而右边有或者右边没有,而左边有,甚至两边都有,但是代码不同,意思就是两边的代码存在的差异对比)
我先说一下右边,右边第一条红色的代码,是:
<com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:layout_gravity="center_horizontal" android:id="@id/clock" android:paddingLeft="6.0dip" android:layout_height="fill_parent" android:singleLine="true" />
也就是说这个是时钟的代码,而我弄了时间居中,是在
android:paddingLeft="6.0dip" android:layout_height="fill_parent"
之间加入了
android:layout_width="wrap_content"
变成了
android:paddingLeft="6.0dip" 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" />
上面说过了,这个是wifi和信号的图标,定义信号图标这段代码原本是在定义电池图标的那段代码上面的,也就是:
<ImageView android:id="@id/battery" android:paddingLeft="4.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" />
这个是电池图标的代码
而我现在为了实现信号居左,把定义信号图标这段代码移动到:
<LinearLayout android:orientation="horizontal" android:id="@id/notification_icon_area" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0">
这段代码下面,从而出现了右边第二条红色代码。
左边第一条红色代码,是:
<com.android.systemui.statusbar.phone.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" />
而这段代码,前面也说过,是通知图标,而我现在把USB调试的图标移动到电池隔壁(图-1),所以我要把这段代码移动到电池图标代码的上面,从而出现了左边的第二条的红色代码和右边第三条红色代码,因为那段代码原来是信号图标,而右边被我修改成通知图标,所以两段代码已经是不一样了。
最后,看左边第三条红色代码,这个是时间图标的代码,也就是右边第一条红色代码,,为了实现时间居中,位置互换了,所以显示了红色
修改到这里,基本上已经跟图-1差不多了,但是这是的信号图标是wifi图标在前,信号图标在后,如何把信号图标弄去前面呢?
打开同意目录下的signal_cluster_view.xml这个文件,这个文件主要是定义wifi和信号的,
如下图:
依旧左边是原文件,右边是修改过的,到底修改了什么呢?
就是把前面定义wifi的几段代码(也就是左边的红色部分):
<FrameLayout android:id="@id/wifi_combo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="-6.0dip">
<ImageView android:id="@id/wifi_signal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:layout_alignParentRight="true" android:layout_centerVertical="true" />
<ImageView android:layout_gravity="bottom|center" android:id="@id/wifi_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</FrameLayout>
<View android:id="@id/spacer" android:visibility="gone" android:layout_width="6.0dip" android:layout_height="6.0dip" />
剪切到:
<ImageView android:id="@id/airplane" android:layout_width="wrap_content" android:layout_height="wrap_content" />
这段代码下面,因为定义wifi下面的那段代码是定义信号的,所以不用动,顺便把:
<ImageView android:layout_gravity="bottom|right|center" android:id="@id/mobile_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
这段代码里面的right|删掉,变成:
<ImageView android:layout_gravity="bottom|center" android:id="@id/mobile_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
到这里就大功告成了,回编译之后把resources.arsc,signal_cluster_view.xml和status_bar.xml用WinRAR的存储模式替换会原来的APK,我在下面给两个文件给你们对比,你们可以下载一个叫Beyond Compare 3的软件进行对比,看看应该如何修改过,但一定要自己动手,这样才有用!!!