久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android statusBar添加back,home,menu按鈕

 lifei_szdz 2013-06-03

Android 界面的系統(tǒng)status bar 上添加home,back,menu 三個菜單,并完成對應(yīng)的系統(tǒng)功能。并有higlight 效果,,修改status bar 高度和status bar 上的文字尺寸。

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

1. 首先完成界面顯示效果,。

    需要修改文件

./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java, 仿照mBatteryIconicon 的添加方式添加自定義的icon ,圖片名稱指定就好了,。另外還要記得修改./frameworks/base/core/res/res/values/arrays.xml ,,這里定義了iconslot, 并且決定了icon 的擺放順序。

    這樣,,你需要的icon 按鍵就可以顯示在系統(tǒng)的status bar 上面了,。

 

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

    需要修改的文件

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

    首先在onTouchEvent 函數(shù)中,獲取當前event 的坐標,,然后比較是否在某個按鍵范圍之內(nèi),。由于系統(tǒng)對于statusBar 的范圍已經(jīng)有了定義,所以這里只需要比較橫坐標就可以了。

    其次,,也是這一步最關(guān)鍵的,,怎么獲取具體某一個icon 的左右邊界坐標呢?系統(tǒng)的status bar 左邊顯示的圖標都是notification, 右邊顯示的是系統(tǒng)icon. 也就是說左邊icon 屬于mNotificationIcons ,,右邊的icon 屬于mStatusIcons. 在文件StatusBarView.java 中出現(xiàn)的offset = getViewOffset(mStatusIcons) ,,得到mStatusIcons 的最左邊的iconleft 橫坐標。用N = mStatusIcons.getChildCount() 得到共有幾個系統(tǒng)icon, 其中包含visibilityfalseicons.mStatusIcons.getChildAt(N-i) 得到的是從右邊數(shù)第i 個的icon view. 這個viewgetLeft()+offset 就是這第iicon 的左邊橫坐標,,對應(yīng)的getRight()+offset 就是這第iicon 的右邊橫坐標,。本例中home鍵是右邊第2個icon.

 

3. 定義icon 響應(yīng)事件

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

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

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

   這里還同時完成了highlight 換圖的動作,,也是用Broadcast 來做得,處理過程一樣,,就是需要區(qū)分action_downaction_up 就可以了,。  

 

4. 調(diào)整status bar 的高度

   如果你需要顯示較大的屏幕尺寸,同時statusBar 的高度要拉大,,上面的iconsize 也需要調(diào)大,。為了協(xié)調(diào)一致,顯示時間的字體和notification 顯示的日期的字體也需要調(diào)大,。具體做法如下:

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

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

  c. 調(diào)節(jié)notification 顯示日期字體的大小,,修改status_bar.xml<com.android.server.status.DateView>textSize 值。    

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多