常見問題2016/09/20

【APP開發】Android 4.0 實現修改桌面底部的狀態列

Android 4.0 桌面底部狀態列分為兩個部分:左邊是三個導航鍵:從左置右依次是:返回鍵 ,Home鍵和RecentApplication鍵,就是檢視最近開啟的所有程式,多工切換就在這裏。 這三個鍵為一個區域 叫NavigationArea,即導航區。  最右邊是NotificationArea,也就是提示資訊區,有電量,無線訊號,藍芽等資訊顯示。 這條StatusBar,是無論開啟哪個程式都會顯示在最下方的。

客戶的要求需要把底部狀態列進行隱藏,通過物理按鍵進行操作就可以了,這些虛擬按鍵還有右邊的狀態導航都全部隱藏。我最初以為在Launcher裏面實現的,看程式碼看了看了半個多小時居然連個返回按鈕的圖示都沒有找到。心裏想開啟任意程式居然都可以顯示在下方應該是系統UI把,我就試著去(frameworks/base/packages/SystemUI/res)下面的drawable理解找「返回鍵」圖示,居然找到了,心裏盡是歡喜。順藤摸瓜最後找到圖示所屬的java類是TabletStatusBar.java(frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/tablet)在找到該類下的makeStatusBarView()方法就可以看到

// The navigation buttons

      mBackButton = (ImageView)sb.findViewById(R.id.back);

      mNavigationArea = (ViewGroup) sb.findViewById(R.id.navigationArea);

       mHomeButton =mNavigationArea.findViewById(R.id.home);

      mMenuButton = mNavigationArea.findViewById(R.id.menu);

      mRecentButton = mNavigationArea.findViewById(R.id.recent_apps);

      mRecentButton.setOnClickListener(mOnClickListener);在這裏就知道系統做了什麼事情了。繼續往上看了一下使用到了sb這個View物件原來在這裏引用的。

final TabletStatusBarView sb =(TabletStatusBarView)View.inflate(context, R.layout.status_bar, null); TabletStatusBarView.java類是繼承FrameLayout,在這裏就可以設定它的隱藏或者顯示屬性了。暫且到這裏底層的事件傳遞虛擬按鍵的原理後續獻上。

本文來自新浪部落格