<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Calvin's Tech Space

    成于堅(jiān)忍,毀于浮躁

       :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
    在Android界面的系統(tǒng)status bar上添加home,back,menu三個(gè)菜單,并完成對(duì)應(yīng)的系統(tǒng)功能。并有higlight效果,修改status bar 高度和status bar上的文字尺寸。
    這需要修改android sdk才能完成,我用的是eclair.下面就我的操作進(jìn)行敘述。
    1.首先完成界面顯示效果。
    需要修改文件
    ./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java,仿照mBatteryIcon等icon的添加方式添加自定義的icon,圖片名稱指定就好了。另外還要記得修改./frameworks/base/core/res/res/values/arrays.xml,這里定義了icon的slot,并且決定了icon的擺放順序。
    這樣,你需要的icon按鍵就可以顯示在系統(tǒng)的status bar上面了。

    2.判斷touch event是否按動(dòng)了某個(gè)icon
    需要修改的文件
    ./frameworks/base/services/java/com/android/server/status/StatusBarView.java
    首先在onTouchEvent函數(shù)中,獲取當(dāng)前event的坐標(biāo),然后比較是否在某個(gè)按鍵范圍之內(nèi)。由于系統(tǒng)對(duì)于statusBar的范圍已經(jīng)有了定義,所以這里只需要比較橫坐標(biāo)就可以了。
    其次,也是這一步最關(guān)鍵的,怎么獲取具體某一個(gè)icon的左右邊界坐標(biāo)呢?系統(tǒng)的status bar左邊顯示的圖標(biāo)都是notification, 右邊顯示的是系統(tǒng)icon. 也就是說(shuō)左邊icon屬于mNotificationIcons,右邊的icon屬于mStatusIcons. 在文件StatusBarView.java中出現(xiàn)的offset = getViewOffset(mStatusIcons),得到mStatusIcons的最左邊的icon的left橫坐標(biāo)。用N = mStatusIcons.getChildCount()得到共有幾個(gè)系統(tǒng)icon,其中包含visibility為false的icons.用mStatusIcons.getChildAt(N-i)得到的是從右邊數(shù)第i個(gè)的icon view. 這個(gè)view的getLeft()+offset就是這第i個(gè)icon的左邊橫坐標(biāo),對(duì)應(yīng)的getRight()+offset就是這第i個(gè)icon的右邊橫坐標(biāo)。本例中home鍵是右邊第2個(gè)icon.

    3.定義icon響應(yīng)事件
    這里使用的方法是在StatusBarView.java中向
    ./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java發(fā)送一個(gè)Broadcast,讓StatusBarPolicy來(lái)完成具體的事件操作。這里需要注意的是不僅要在./frameworks/base/core/java/android/content/Intent.java中定義intent,還要在StatusBarPolicy的構(gòu)造函數(shù)中添加該intent的過(guò)濾動(dòng)作,即filter.addAction(Intent.ACTION_BACKICON_CHANGED).例如,按動(dòng)了back鍵,如果當(dāng)前事件為action_up,就向系統(tǒng)發(fā)送一個(gè)keyEvent,keyCode為KeyEvent.KEYCODE_BACK. 這里借用的是./frameworks/base/cmds/input/src/com/android/commands/input/Input.java中的sendKeyEvent函數(shù),直接拷貝過(guò)來(lái),按照需要稍微修改一下形參就可以了,過(guò)程不要修改。
    需要說(shuō)明的是,當(dāng)點(diǎn)擊statusBar可以拉出來(lái)一個(gè)notification列表,當(dāng)這個(gè)列表顯示出來(lái)的時(shí)候,這三個(gè)back, menu, home鍵的響應(yīng)速度會(huì)非常慢,所以這時(shí)不響應(yīng)事件并隱藏這三個(gè)鍵。具體做法是在StatusBarView的onTouchEvent()中判斷mService.mExpanded或者 mService.mTracking為真時(shí)就不做響應(yīng)。mService是StatusBarService對(duì)象。隱藏三個(gè)鍵也是用Broadcast來(lái)做的,但這個(gè)intent是由StatusBarServie發(fā)出來(lái)的,當(dāng)mExpandedVisible = false時(shí)顯示,當(dāng)mExpandedVisible = true時(shí)隱藏。
    這里還同時(shí)完成了highlight換圖的動(dòng)作,也是用Broadcast來(lái)做得,處理過(guò)程一樣,就是需要區(qū)分action_down和action_up就可以了。

    4.調(diào)整status bar的高度
    如果你需要顯示較大的屏幕尺寸,同時(shí)statusBar的高度要拉大,上面的icon的size也需要調(diào)大。為了協(xié)調(diào)一致,顯示時(shí)間的字體和notification顯示的日期的字體也需要調(diào)大。具體做法如下:
    a.調(diào)節(jié)status bar icon的size: 只調(diào)節(jié)status_bar.xml的textSize標(biāo)簽似乎不起作用,同時(shí)又修改了./base/services/java/com/android/server/status/StatusBarIcon.java的t.setTextSize(32);語(yǔ)句才成功。不知道修改status_bar.xml的標(biāo)簽下的layout_height值是不是必須的,反正我是一起都給改了。
    b.調(diào)節(jié)status bar height: ./base/core/res/res/values/dimens.xml 找得我好辛苦!不知道還需不需要修改./base/core/res/res/values/themes.xml中的Window attributes的windowTitleSize值,反正我也給改了。
    c.調(diào)節(jié)notification顯示日期字體的大小,修改status_bar.xml的的textSize值。
    到這里,就完成了所有工作,看看效果吧。

    http://blog.csdn.net/shiningmm/archive/2010/04/08/5461506.aspx
    posted on 2010-06-09 00:24 calvin 閱讀(3745) 評(píng)論(4)  編輯  收藏 所屬分類: Android

    Feedback

    # re: Android statusBar添加back,home,menu按鈕 2010-06-22 23:07 費(fèi)工夫
    呵呵呵  回復(fù)  更多評(píng)論
      

    # re: Android statusBar添加back,home,menu按鈕 2010-06-22 23:08 費(fèi)工夫
    輔導(dǎo)費(fèi)  回復(fù)  更多評(píng)論
      

    # re: Android statusBar添加back,home,menu按鈕 2010-06-22 23:11 與桑
    你好:你實(shí)現(xiàn)過(guò)這個(gè)功能是吧?很不錯(cuò)!我也在學(xué)習(xí)這個(gè)東西。沒(méi)有實(shí)現(xiàn)!你能給我發(fā)一下你的工程代碼嗎?十分感激!郵箱wrhw214@gmail.com
    QQ :307594397.再次謝謝你!  回復(fù)  更多評(píng)論
      

    # re: [轉(zhuǎn)]Android statusBar添加back,home,menu按鈕 2010-10-19 19:51 王東林
    內(nèi)容很籠統(tǒng),我實(shí)現(xiàn)過(guò),目前是音量遞增跟遞減以及home鍵極限操作優(yōu)化了一下不會(huì)出現(xiàn)死機(jī)現(xiàn)象,其他的比如back跟menu如果頻繁點(diǎn)擊就會(huì)刷新不過(guò)來(lái),死機(jī)  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 国产羞羞的视频在线观看免费| 成人爽a毛片免费| 亚洲熟妇成人精品一区| 亚洲av乱码一区二区三区| 精品亚洲国产成人av| 免费一级做a爰片久久毛片潮| 免费萌白酱国产一区二区三区| 国产成人99久久亚洲综合精品| 亚洲国产精品久久久久| 亚洲国产视频一区| 曰批免费视频播放在线看片二| 又粗又大又长又爽免费视频| 亚洲va无码专区国产乱码| 一区二区亚洲精品精华液 | 国产成人精品久久亚洲高清不卡| 性感美女视频在线观看免费精品 | 亚洲综合激情九月婷婷| 一区二区三区免费高清视频| 91频在线观看免费大全| 又色又污又黄无遮挡的免费视| 羞羞视频网站免费入口| 97热久久免费频精品99| 亚洲情A成黄在线观看动漫软件 | 亚洲熟女一区二区三区| 亚洲午夜福利在线视频| 可以免费观看的一级毛片| 一区二区免费国产在线观看| 青青草免费在线视频| 婷婷亚洲综合五月天小说| 成人a毛片免费视频观看| 亚洲国产精品一区二区久久hs| 无码AV动漫精品一区二区免费| 国产亚洲av片在线观看播放| 乱人伦中文视频在线观看免费| 亚洲av无码一区二区三区不卡| 综合在线免费视频| 日本免费精品一区二区三区| 亚洲日本在线看片| 国产一级做a爱免费视频| 亚洲国产成人AV网站| 亚洲AV无码专区在线播放中文|