最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 實(shí)現(xiàn)沉浸式狀態(tài)欄的方法

 更新時(shí)間:2015年09月12日 11:40:10   作者:安卓弟  
沉浸式狀態(tài)欄的來源就是很多手機(jī)用的是實(shí)體按鍵,沒有虛擬鍵,于是開了沉浸模式就只有狀態(tài)欄消失了。下面腳本之家小編給大家介紹Android 實(shí)現(xiàn)沉浸式狀態(tài)欄,需要的朋友可以參考下

沉浸式狀態(tài)欄的來源就是很多手機(jī)用的是實(shí)體按鍵,沒有虛擬鍵,于是開了沉浸模式就只有狀態(tài)欄消失了。于是沉浸模式成了沉浸式狀態(tài)欄。

我們先來看下具體的效果

開啟沉浸模式后,狀態(tài)欄消失,從頂部向下滑動(dòng),狀態(tài)欄出現(xiàn),退出沉浸模式,狀態(tài)欄也出現(xiàn)了。

我們的代碼基于前一篇文章。首先是兩個(gè)開啟沉浸模式和關(guān)閉沉浸模式的函數(shù)

@SuppressLint("NewApi")
public static void hideSystemUI(View view) {
 view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
 | View.SYSTEM_UI_FLAG_FULLSCREEN
 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}

@SuppressLint("NewApi")
public static void showSystemUI(View view) {
 view.setSystemUiVisibility(
 View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
  | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

這些代碼可以在google的開發(fā)者文檔中找到,可以看這里Using Immersive Full-Screen Mode,上面的代碼是在Android 4.4中才會(huì)生效,對(duì)應(yīng)的Android版本兼容的判斷請(qǐng)自行處理。

此外還需要一個(gè)輔助函數(shù),用于獲得狀態(tài)欄高度,使用反射獲得。

/**
 * 獲狀態(tài)欄高度
 *
 * @param context 上下文
 * @return 通知欄高度
 */
public int getStatusBarHeight(Context context) {
 int statusBarHeight = 0;
 try {
 Class<?> clazz = Class.forName("com.android.internal.R$dimen");
 Object obj = clazz.newInstance();
 Field field = clazz.getField("status_bar_height");
 int temp = Integer.parseInt(field.get(obj).toString());
 statusBarHeight = context.getResources().getDimensionPixelSize(temp);
 } catch (Exception e) {
 e.printStackTrace();
 }
 return statusBarHeight;
}

點(diǎn)擊hide按鈕進(jìn)入沉浸模式,也就是隱藏狀態(tài)欄,隱藏狀態(tài)欄的同時(shí)我們需要修改Toolbar的上內(nèi)邊距,否則會(huì)顯得很難看,這里注冊(cè)一個(gè)監(jiān)聽OnSystemUiVisibilityChangeListener,當(dāng)進(jìn)入沉浸模式后我們改變Toolbar的上內(nèi)邊距

hide.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 View view = getWindow().getDecorView();
 hideSystemUI(view);
 mToolbar.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
 @Override
 public void onSystemUiVisibilityChange(int visibility) {
 mToolbar.setPadding(mToolbar.getPaddingLeft(), 0,mToolbar.getPaddingRight(), mToolbar.getPaddingBottom());
 }
 });
 }
});

進(jìn)入沉浸模式后,手指從屏幕頂部向下劃,狀態(tài)欄就出現(xiàn)了,過2秒左右它又會(huì)自動(dòng)消失。

點(diǎn)擊show按鈕退出沉浸模式,同時(shí)Toolbar的內(nèi)邊距也要增加到狀態(tài)欄的高度。

show.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 View view = getWindow().getDecorView();
 showSystemUI(view);
 mToolbar.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
 @Override
 public void onSystemUiVisibilityChange(int visibility) {
 mToolbar.setPadding(mToolbar.getPaddingLeft(), getStatusBarHeight(MainActivity.this),mToolbar.getPaddingRight(), mToolbar.getPaddingBottom());
 }
 });
 }
});

具體效果見上方的效果圖。

如果使用的是SystemBarTintManager這個(gè)類進(jìn)行的狀態(tài)欄的著色,除上方的操作外,還要在對(duì)應(yīng)的監(jiān)聽里增加狀態(tài)欄著色的禁止和啟動(dòng)的功能。

進(jìn)入沉浸模式,要禁用

tintManager.setStatusBarTintEnabled(false);

退出沉浸模式,要啟動(dòng)

tintManager.setStatusBarTintEnabled(true);

如果你想更加平滑,則可以對(duì)padding的改成增加動(dòng)畫,具體動(dòng)畫效果自行添加。

切記在使用沉浸模式前記得判斷Android的版本。SYSTEM_UI_FLAG_IMMERSIVE_STICKY只能在大于等于API Level 19使用。你要兼容低版本的同時(shí)使用沉浸模式。在使用SYSTEM_UI_FLAG_IMMERSIVE_STICKY之前先用android.os.Build.VERSION.SDK_INT來判斷當(dāng)前的系統(tǒng)版本是否是android4.4以上,如果是就啟用代碼,如果不是則跳過不執(zhí)行。

以上就是本文的全部?jī)?nèi)容,希望大家喜歡。

相關(guān)文章

最新評(píng)論

正宁县| 庐江县| 柞水县| 綦江县| 庆安县| 盐池县| 南漳县| 阿合奇县| 六安市| 剑河县| 鄂伦春自治旗| 固阳县| 深州市| 吉林市| 滦平县| 乐平市| 高州市| 江北区| 海南省| 长寿区| 永州市| 武穴市| 南乐县| 德庆县| 通化县| 永寿县| 青海省| 民乐县| 宣汉县| 商丘市| 华亭县| 樟树市| 乌恰县| 礼泉县| 新巴尔虎右旗| 裕民县| 阜阳市| 庆城县| 永嘉县| 章丘市| 巴林左旗|