android4.1 平板隱藏System Bar

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

<p></p>

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

<p></p>

網上搜羅了相應的資料,好像4.1有個SYSTEM_UI_FLAG_HIDE_NAVIGATION能夠處理System Bar的隱藏,無論我在代碼裏面如何設置,就是不見效果,懷疑是手機上面的功能塊吧,沒得4.1的實體手機,就不具體深究。網上有些工具軟件對其處理,有的須要Root權限,有的只是移動SystemUI軟件包位置做消顯,感受不實用,查看View.java的源碼,發現還有個標誌位SYSTEM_UI_FLAG_SHOW_FULLSCREEN,實踐了一會,預期的效果就出來了。

<p></p>

關鍵代碼:

<p></p>

/**
 * 設置系統欄可見性
 */
public static void setSystemBarVisible(final Activity context,boolean visible) {
	int flag = context.getWindow().getDecorView().getSystemUiVisibility();   // 獲取當前SystemUI顯示狀態
	// int fullScreen = View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN;
	int fullScreen = 0x8;   // 4.1 View.java的源碼裏面隱藏的常量SYSTEM_UI_FLAG_SHOW_FULLSCREEN,其實Eclipse裏面也能夠調用系統隱藏接口,從新提取下android.jar,這裏就不述了。
	if(visible) {   // 顯示系統欄
		if((flag & fullScreen) != 0) {  // flag標誌位中已經擁有全屏標誌SYSTEM_UI_FLAG_SHOW_FULLSCREEN
			context.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);   // 顯示系統欄
		}
	} else {    // 隱藏系統欄
		if((flag & fullScreen) == 0) {  // flag標誌位中不存在全屏標誌SYSTEM_UI_FLAG_SHOW_FULLSCREEN
			context.getWindow().getDecorView().setSystemUiVisibility(flag | fullScreen); // 把全屏標誌位加進去
		}
	}
}

<p></p>

這裏多加了判斷的方法,供調用

<p></p>

/**
 * 判斷狀態欄是否顯示
 */
public static boolean isSystemBarVisible(final Activity context) {
	int flag = context.getWindow().getDecorView().getSystemUiVisibility();
	// return (flag & View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN) != 0; 
	return (flag & 0x8) == 0;
}

<p></p>

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

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

相關文章
相關標籤/搜索