Android statusBar添加back,home,menu按鈕

來源:互聯網
上載者:User

在Android介面的系統status bar上添加home,back,menu三個菜單,並完成對應的系統功能。並有higlight效果,修改status bar 高度和status bar上的文字尺寸。

這需要修改android sdk才能完成,我用的是eclair.下面就我的操作進行敘述。

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按鍵就可以顯示在系統的status bar上面了。

 

2.判斷touch event是否按動了某個icon

    需要修改的檔案

./frameworks/base/services/java/com/android/server/status/StatusBarView.java

    首先在onTouchEvent函數中,擷取當前event的座標,然後比較是否在某個按鍵範圍之內。由於系統對於statusBar的範圍已經有了定義,所以這裡只需要比較橫座標就可以了。

    其次,也是這一步最關鍵的,怎麼擷取具體某一個icon的左右邊界座標呢?系統的status bar左邊顯示的表徵圖都是notification, 右邊顯示的是系統icon. 也就是說左邊icon屬於mNotificationIcons,右邊的icon屬於mStatusIcons. 在檔案StatusBarView.java中出現的offset = getViewOffset(mStatusIcons),得到mStatusIcons的最左邊的icon的left橫座標。用N = mStatusIcons.getChildCount()得到共有幾個系統icon,其中包含visibility為false的icons.用mStatusIcons.getChildAt(N-i)得到的是從右邊數第i個的icon view. 這個view的getLeft()+offset就是這第i個icon的左邊橫座標,對應的getRight()+offset就是這第i個icon的右邊橫座標。本例中home鍵是右邊第2個icon.

 

3.定義icon響應事件

   這裡使用的方法是在StatusBarView.java中向

./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java發送一個Broadcast,讓StatusBarPolicy來完成具體的事件操作。這裡需要注意的是不僅要在./frameworks/base/core/java/android/content/Intent.java中定義intent,還要在StatusBarPolicy的建構函式中添加該intent的過濾動作,即filter.addAction(Intent.ACTION_BACKICON_CHANGED).例如,按動了back鍵,如果當前事件為action_up,就向系統發送一個keyEvent,keyCode為KeyEvent.KEYCODE_BACK. 這裡借用的是./frameworks/base/cmds/input/src/com/android/commands/input/Input.java中的sendKeyEvent函數,直接拷貝過來,按照需要稍微修改一下形參就可以了,過程不要修改。

   需要說明的是,當點擊statusBar可以拉出來一個notification列表,當這個列表顯示出來的時候,這三個back, menu, home鍵的響應速度會非常慢,所以這時不響應事件並隱藏這三個鍵。具體做法是在StatusBarView的onTouchEvent()中判斷mService.mExpanded或者 mService.mTracking為真時就不做響應。mService是StatusBarService對象。隱藏三個鍵也是用Broadcast來做的,但這個intent是由StatusBarServie發出來的,當mExpandedVisible = false時顯示,當mExpandedVisible = true時隱藏。

   這裡還同時完成了highlight換圖的動作,也是用Broadcast來做得,處理過程一樣,就是需要區分action_down和action_up就可以了。  

 

4.調整status bar的高度

   如果你需要顯示較大的螢幕尺寸,同時statusBar的高度要拉大,上面的icon的size也需要調大。為了協調一致,顯示時間的字型和notification顯示的日期的字型也需要調大。具體做法如下:

  a.調節status bar icon的size: 只調節status_bar.xml的textSize標籤似乎不起作用,同時又修改了./base/services/java/com/android/server/status/StatusBarIcon.java的t.setTextSize(32);語句才成功。不知道修改status_bar.xml的<com.android.server.status.AnimatedImageView>標籤下的layout_height值是不是必須的,反正我是一起都給改了。

  b.調節status bar height: ./base/core/res/res/values/dimens.xml 找得我好辛苦!不知道還需不需要修改./base/core/res/res/values/themes.xml中的Window attributes的windowTitleSize值,反正我也給改了。

  c.調節notification顯示日期字型的大小,修改status_bar.xml的<com.android.server.status.DateView>的textSize值。   

  到這裡,就完成了所有工作,看看效果吧。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.