android4.1 平板隱藏System Bar 發表於1年前(2012-11-05 18:24) 閱讀(1985) | 評論(4) 16人收藏此文章, 我要收藏 贊0 android4.1 平
阿新 • • 發佈:2019-01-06
/**
* @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 |
} |