1. 程式人生 > >android4.1 平板隱藏System Bar 發表於1年前(2012-11-05 18:24) 閱讀(1985) | 評論(4) 16人收藏此文章, 我要收藏 贊0 android4.1 平

android4.1 平板隱藏System Bar 發表於1年前(2012-11-05 18:24) 閱讀(1985) | 評論(4) 16人收藏此文章, 我要收藏 贊0 android4.1 平

/**
* @author wilber
* @target 4.1
* @requirements:4.1平板隱藏系統欄
* @theme android4.1 平板隱藏System Bar
* @remark 轉載請註明出處http://my.oschina.net/wilber
*/

有時開發視訊或遊戲程式,即使設定了getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE),一不小心觸摸了底部區域的小黑點,看視訊注意力會分散,遊戲中斷或注意力分散,頗感不爽。

網上搜羅了相應的資料,好像4.1有個SYSTEM_UI_FLAG_HIDE_NAVIGATION可以處理System Bar的隱藏,不管我在程式碼裡面如何設定,就是不見效果,懷疑是手機上面的功能塊吧,沒得4.1的實體手機,就不具體深究。網上有些工具軟體對其處理,有的需要Root許可權,有的只是移動SystemUI軟體包位置作消顯,感覺不實用,檢視View.java的原始碼,發現還有個標誌位SYSTEM_UI_FLAG_SHOW_FULLSCREEN,實踐了一會,預期的效果就出來了。

關鍵程式碼:

01 /**
02 * 設定系統欄可見性
03 */
04 public static void setSystemBarVisible(final Activity context,boolean visible) {
05 int flag = context.getWindow().getDecorView().getSystemUiVisibility();   // 獲取當前SystemUI顯示狀態
06 // int fullScreen = View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN;
07
int fullScreen = 0x8;   // 4.1 View.java的原始碼裡面隱藏的常量SYSTEM_UI_FLAG_SHOW_FULLSCREEN,其實Eclipse裡面也可以呼叫系統隱藏介面,重新提取下android.jar,這裡就不述了。
08 if(visible) {   // 顯示系統欄
09 if((flag & fullScreen) != 0) {  // flag標誌位中已經擁有全屏標誌SYSTEM_UI_FLAG_SHOW_FULLSCREEN
10 context.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);   
// 顯示系統欄
11 }
12 else {    // 隱藏系統欄
13 if((flag & fullScreen) == 0) {  // flag標誌位中不存在全屏標誌SYSTEM_UI_FLAG_SHOW_FULLSCREEN
14 context.getWindow().getDecorView().setSystemUiVisibility(flag | fullScreen); // 把全屏標誌位加進去
15 }
16 }
17 }

這裡多加了判斷的方法,供呼叫

1 /**
2 * 判斷狀態列是否顯示
3 */
4 public static boolean isSystemBarVisible(final Activity context) {
5 int flag = context.getWindow().getDecorView().getSystemUiVisibility();
6 // return (flag & View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN) != 0;
7 return (flag & 0x8) == 0;
8 }

程式碼可能對3.0或4.0以上的手機版本不適用,只實測4.1平板,在4.04的小米手機上無效果

補充:最近看了下官方4.1的原始碼,唉,程式碼不一致,無效果,原來是Rockchip廠商新加入的功能,無奈,但是此功能可移植成功,抱歉。