一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

關(guān)于修改狀態(tài)欄的教程,表達(dá)不好還望海涵

 追夢(mèng)的赤子 2013-08-25
第一部分,關(guān)于代碼的

我們首先看一下系統(tǒng)原代碼: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./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>


當(dāng)然,這個(gè)代碼還沒(méi)結(jié)束,只是前面一部分,但是我們只需要關(guān)注前面一部分就可以了。起始行和結(jié)束行,我分別用同樣的顏色標(biāo)注。從顏色標(biāo)注,我們可以看到這段代碼大體框架。

這段代碼就是描述狀態(tài)欄的,1為一個(gè)框架,1這個(gè)框架里面包含1.1  1.2兩個(gè)主要框架以及時(shí)間等次要框架。

具體怎么看框架里面的內(nèi)容,我現(xiàn)在開(kāi)始描述。大家或多或少都懂點(diǎn)英文,但是,如果只懂一點(diǎn)點(diǎn)和我一樣的話,那么很容易被迷惑。每一行代碼具體是描述什么的,要看android:id=""這個(gè)單詞的內(nèi)容。于是我們可以容易看出1.1第一句text部分是描述運(yùn)營(yíng)商的,橙色區(qū)域是描述通知圖標(biāo)等內(nèi)容。1.2前面那部分是描述網(wǎng)速,網(wǎng)速后面跟著的是鬧鐘藍(lán)牙等圖標(biāo)。1.2是描述信號(hào),以及電池。1.2后面部分是描述時(shí)鐘。

這樣,整體布局我們就能看出來(lái)了。

至于沒(méi)一句里面的代碼,用法,需要注意的,其實(shí)我懂得的也不多。我大概知道 gravity=是子組件位置,比如gravity=center意思是居中。gravity= 和 layout gravity=的區(qū)別是前者是內(nèi)容居中,后者是位置相對(duì)于父組件居中。具體想了解更多,還是問(wèn)百度。我只是寫(xiě)一個(gè)簡(jiǎn)單教程讓大家理解,方便大家研究,給大家鋪路。我沒(méi)有把握完全教會(huì)大家。

每個(gè)代碼的用法,網(wǎng)上都可以百度的到。

然后我給大家講一下我的思路,也許你有更好的思路。但是我的思路只是供給你參考。是我最新代碼的思路。

要想完美更改,就需要重新布局。之前很多人做過(guò)時(shí)間居中補(bǔ)丁。但是我看過(guò),那個(gè)只是把時(shí)間單獨(dú)提出來(lái)作為一個(gè)獨(dú)立框架,并行于總框架。居中是沒(méi)問(wèn)題,可能有通知之類(lèi)的會(huì)有重影。按照我的思路居中的話,不會(huì)重影。圖標(biāo)多到一定數(shù)量到達(dá)相關(guān)位置會(huì)變成省略號(hào)。

我的構(gòu)思是重新布局,時(shí)間不要提出來(lái),放到正中。這中間就會(huì)涉及一個(gè)比例問(wèn)題,如果不做比例的話,就會(huì)變成這個(gè)樣子:




11.jpg






雖然你代碼寫(xiě)居中了,但是時(shí)間居中不了。所以要做比例。

我的構(gòu)思是,把1.1 和1.2做成相同比例,然后時(shí)間放中間。這樣就不會(huì)出差錯(cuò)了。

大家看這一句:

   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”就是表示比例的。數(shù)值越小,優(yōu)先級(jí)越大。昨天我做測(cè)試的時(shí)候,在這里

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",但是沒(méi)用,結(jié)果變成這個(gè)樣子:




12.jpg






所以在使用layout_weight=比例的時(shí)候,要注意,layout_width="wrap_conten"改成layout_width="0dip"這樣才能保持比例。

相對(duì)這些來(lái)說(shuō),信號(hào)居左就簡(jiǎn)單多了。我們把1.2里面的id=signal_cluster_view 這部分內(nèi)容提取出來(lái),放到1.1里面,提取的時(shí)候注意不要破壞語(yǔ)法結(jié)構(gòu)。這樣,信號(hào)就放到左邊了。同時(shí)為了保持比例,除了時(shí)間放到1.1  1.2中間,其他的 左邊的放到左邊框架里,右邊的放到右邊的框架里。那么布局就完成了。下面我放出我修改后的代碼給大家對(duì)比參詳:

<?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./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>

大家可以看到,我的代碼之中,而是把整個(gè)狀態(tài)欄分成三個(gè)布局。然后把每個(gè)元素嵌入到里面。其實(shí)這些東西之所以難,主要一個(gè)是結(jié)構(gòu),對(duì)于我們這些新手來(lái)說(shuō),看不懂,看懂了也就好說(shuō)了。另外一個(gè),就是注意語(yǔ)法。語(yǔ)法是最關(guān)鍵的,但是這里面涉及太多,一個(gè)教程寫(xiě)不完。而我們的目的只是學(xué)會(huì)改。最簡(jiǎn)單應(yīng)該知道的語(yǔ)法錯(cuò)誤不要犯的就是,代碼通常 不論以什么開(kāi)始,結(jié)束時(shí)必然要有"/"。 如果沒(méi)有,那么語(yǔ)法不完整。一行最后有"/"那么這一行本身就是一句完整代碼。如果沒(méi)有“/”,那么我們就要找下一個(gè)"/"在哪,找到了,可能一句,可能兩句也可能下一個(gè)“/”在好幾個(gè)完整語(yǔ)句的后面,所以這個(gè)是首先注意不要犯的錯(cuò)誤。

把結(jié)構(gòu)弄明白了 ,每句代碼大概知道是干什么的,然后把握關(guān)鍵詞,比如gratity=是關(guān)于位置的,比如paddingRight="6.0dip"是距離右邊6個(gè)像素的位置等等。這些就問(wèn)百度。不要讓這些駁雜的東西占據(jù)教程,不然你們也沒(méi)耐心看完。

我然后我再說(shuō)一個(gè)就是,大家仔細(xì)看就會(huì)注意到,我的代碼里少了一句:

            <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" />

這一句是描述運(yùn)營(yíng)商的,那么為什么少了這一句呢?我的運(yùn)營(yíng)商跑哪了?這就涉及到另一個(gè)問(wèn)題。如果放著這一句,那么,信號(hào)是居左了,wifi一樣還是在信號(hào)左邊,不會(huì)跑到運(yùn)營(yíng)商旁邊,達(dá)不到我們想要的效果。如果要wifi放到運(yùn)營(yíng)商右邊,我們還需要修改signal_cluster_view.xml這個(gè)文件。這個(gè)文件是關(guān)于信號(hào)。我們要想wifi在運(yùn)營(yíng)商右邊,就需要把運(yùn)營(yíng)商放到信號(hào)里面作為一只整體。

具體怎么修改,相信大家如果認(rèn)真仔細(xì)看完并且理解了我前面的內(nèi)容,那么你就知道怎么改了。為了方便大家研究,我把系統(tǒng)源碼和我修改后的代碼做成附件給大家研究。







系統(tǒng)源碼.rar

(1.85 KB, 下載次數(shù): 219)














修改代碼.rar

(1.94 KB, 下載次數(shù): 484)






大家解壓縮兩個(gè)文件,修改代碼我沒(méi)改文件名,1是修改statu_bar.xml的代碼,2是修改signal_cluster_view.xml的。代碼只是給你們參詳?shù)?,不是讓你們直接拿去使用的,如果直接拿去使用遇到任何BUG ,本作者不負(fù)任何責(zé)任。因?yàn)榻坛涛乙呀?jīng)寫(xiě)了。另外,我也說(shuō)了,我寫(xiě)教程只是鋪路,每個(gè)人理解多少,是你們自己的造化。我也是新手。而且這里面涉及內(nèi)容太多,根本無(wú)法寫(xiě)出一篇完整的讓每個(gè)人都明白的教程。

你們自己需要做的就是去百度語(yǔ)法,修改位置的時(shí)候不要出錯(cuò)。



代碼做完剩下的就是反編譯了 。



本來(lái)反編譯如果不明白的你們應(yīng)該百度 ,畢竟每個(gè)人用的軟件不一樣。所以教程也不一樣。但是我怕被人噴,最郁悶的就是我們這些人辛苦研究點(diǎn)東西分享,但是哪里分享的不全面就會(huì)被噴。



反編譯我就簡(jiǎn)單說(shuō)幾點(diǎn)注意的,反編譯的時(shí)候注意加載framework-res.apk 和framework-miui-res.apk。




1.jpg






回編譯后,反編譯的miuisystemui文件夾里有個(gè)dist文件夾,那里面的apk才是回編譯好的。但是回編譯的不能直接使用 ,要把里面修改過(guò)的xml文件和recources.arsc替換到?jīng)]有反編譯過(guò)的里面。然后用修改過(guò)原miuisystemui.apk這個(gè)才是補(bǔ)丁




4.jpg






替換用zip打開(kāi)兩個(gè)apk文件,用回編過(guò)的拖到未編過(guò)的,壓縮方式選擇存儲(chǔ)。



回編失敗檢查是否代碼有問(wèn)題,如果沒(méi)問(wèn)題,就檢查是否其他問(wèn)題。這里建議大家修改以前測(cè)試一下反編譯不做任何修改能否回編成功。



最后再總結(jié)說(shuō)一句,我的教程,不能幫助大家完全學(xué)會(huì),只能幫助大家更容易的理解看懂代碼。并且用我成功的案例,帶給你們經(jīng)驗(yàn)給你們參詳。你們所要做的就是百度語(yǔ)法結(jié)構(gòu),注意修改時(shí)不要出錯(cuò)。畢竟我從完全不會(huì),到學(xué)做主題到現(xiàn)在學(xué)會(huì)代碼 ,也全靠論壇,百度更多的還是自己的琢磨。大神們時(shí)間精力有限,也只能提供很少的幫助給我。但是我還是研究會(huì)了。我能做到的,相信你們也能做到。



最后,發(fā)個(gè)廣告。我的新軍迷和低調(diào)上線了,一款收費(fèi)一款免費(fèi),還請(qǐng)大家支持。雖然我當(dāng)時(shí)發(fā)布的時(shí)候說(shuō)是米2專(zhuān)用,但是審核組不允許,一再審核失敗,又不斷修改完善。結(jié)果專(zhuān)用主題,其實(shí)兼容其他機(jī)型。



相信大家學(xué)會(huì)并且理解我的教程后,也許很快,你們發(fā)揮你們的想象力,論壇會(huì)出現(xiàn)各種各樣的狀態(tài)欄秀了。





    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    国产精品久久精品毛片| 亚洲av成人一区二区三区在线| 中文字幕亚洲精品乱码加勒比 | 精品午夜福利无人区乱码| 中国少妇精品偷拍视频| 亚洲精品国产主播一区| 亚洲熟女精品一区二区成人| 国产视频福利一区二区| 婷婷色网视频在线播放| 激情亚洲一区国产精品久久| 亚洲一区二区三区中文久久| 国产精品白丝一区二区| 日韩一区二区三区有码| 日本乱论一区二区三区| 风韵人妻丰满熟妇老熟女av| 成人精品视频在线观看不卡| 成年女人下边潮喷毛片免费| 国产视频一区二区三区四区| 日韩成人中文字幕在线一区| 免费人妻精品一区二区三区久久久| 亚洲内射人妻一区二区| 欧美乱视频一区二区三区| 草草草草在线观看视频| 熟女少妇久久一区二区三区| 久久偷拍视频免费观看| 免费高清欧美一区二区视频 | 美女被草的视频在线观看| 国产丝袜女优一区二区三区| 亚洲一区二区三区三州| 精品丝袜一区二区三区性色| 日韩中文字幕免费在线视频| 午夜国产福利在线播放| 好骚国产99在线中文| 日韩一区二区三区观看| 日韩中文字幕狠狠人妻| 狠狠做深爱婷婷久久综合| 国产91人妻精品一区二区三区| 麻豆看片麻豆免费视频| 91人妻人澡人人爽人人精品| 亚洲最新的黄色录像在线| 亚洲综合香蕉在线视频|