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

Android UI體驗之全屏沉浸式透明狀態(tài)欄樣式

 更新時間:2017年01月06日 08:47:33   投稿:mrr  
這篇文章主要介紹了Android UI體驗之全屏沉浸式透明狀態(tài)欄效果的相關(guān)資料,需要的朋友可以參考下

前言:

   Android 4.4之后谷歌提供了沉浸式全屏體驗, 在沉浸式全屏模式下, 狀態(tài)欄、 虛擬按鍵動態(tài)隱藏, 應用可以使用完整的屏幕空間, 按照 Google 的說法, 給用戶一種 身臨其境 的體驗。而Android 5.0之后谷歌又提出了 ColorPalette 的概念,讓開發(fā)者可以自己設定系統(tǒng)區(qū)域的顏色,使整個 App 的顏色風格和系統(tǒng)的顏色風格保持統(tǒng)一。今天學習總結(jié)一下如何實現(xiàn)Android 4.4以上全屏沉浸式透明狀態(tài)欄效果。先看下預期效果:

 首先現(xiàn)分清楚哪部分是狀態(tài)欄,哪部分是導航欄

狀態(tài)欄StatusBar如下

導航欄NavigationBar如下

如何實現(xiàn)?

 1.)首先實現(xiàn)全屏

 第一種:繼承主題特定主題

 在Android API 19以上可以使用****.TranslucentDecor***有關(guān)的主題,自帶相應半透明效果,Theme.Holo.NoActionBar.TranslucentDecor和Theme.Holo.Light.NoActionBar.TranslucentDecor兩種主題為新增加的,所以要新建values-v19文件夾并創(chuàng)建styles文件添加如下代碼

 <style name="AppBaseTheme" parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor">
  <!-- Customize your theme here. -->
 </style>

第二種:在activity中采用代碼的方式

Android 4.4以上可以添加如下代碼

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明狀態(tài)欄
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明導航欄
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}

Android 5.0 以上也可以使用下面的代碼實現(xiàn)全屏

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
 | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
}

全屏效果

不難發(fā)現(xiàn)此時狀態(tài)欄占有的位置消失,和app的布局疊在一起了,接下來解決這個問題

2.)解決狀態(tài)欄占位問題

第一種:主題添加如下設置

<item name="android:fitsSystemWindows">true</item>

第二種:activity layout根目錄添加下面代碼

android:fitsSystemWindows="true"

第三種:通過Java代碼設置

rootview.setFitsSystemWindows(true);

fitsSystemWindows只作用在sdk>=19的系統(tǒng)上就是高于4.4的系統(tǒng),這個屬性可以給任何view設置,只要設置了這個屬性此view的所有padding屬性失效.只有在設置了透明狀態(tài)欄(StatusBar)或者導航欄(NavigationBar)此屬性才會生效,

如果上述設置了狀態(tài)欄和導航欄為透明的話,相當于對該View自動添加一個值等于狀態(tài)欄高度的paddingTop,和等于導航欄高度的paddingBottom,效果如下

 3.)狀態(tài)欄導航欄設置背景色

4.4以上的可以采用修改contentView的背景色,或者動態(tài)添加一個view到contentView上

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
   //透明狀態(tài)欄
   window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
   //透明導航欄
   window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
   //設置contentview為fitsSystemWindows
   ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
   View childAt = contentView.getChildAt(0);
   if (childAt != null) {
    childAt.setFitsSystemWindows(true);
   }
   //給statusbar著色
   View view = new View(this);
   view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(this)));
   view.setBackgroundColor(color);
   contentView.addView(view);
  }

動態(tài)獲取StatusBarHeight函數(shù)如下

 /**
  * 獲取狀態(tài)欄高度
  *
  * @param context context
  * @return 狀態(tài)欄高度
  */
 private static int getStatusBarHeight(Context context) {
  // 獲得狀態(tài)欄高度
  int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
  return context.getResources().getDimensionPixelSize(resourceId);
 }

動態(tài)獲取NavigationBarHeight函數(shù)如下

 /**
  * 獲取導航欄高度
  *
  * @param context context
  * @return 導航欄高度
  */
 public static int getNavigationBarHeight(Context context) {
  int resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
  return context.getResources().getDimensionPixelSize(resourceId);
 }

然后Android5.0以上谷歌提供了新的api可以更新狀態(tài)欄和導航欄的背景色

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
     | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
   window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
     | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
     | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
   window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
   //設置狀態(tài)欄顏色
   window.setStatusBarColor(color);
   //設置導航欄顏色
   window.setNavigationBarColor(color);
   ViewGroup contentView = ((ViewGroup) findViewById(android.R.id.content));
   View childAt = contentView.getChildAt(0);
   if (childAt != null) {
    childAt.setFitsSystemWindows(true);
   }
//   contentView.setPadding(0, getStatusBarHeight(this), 0, 0);
  }

這樣總體效果就實現(xiàn)了

4.)貼出整體java代碼實現(xiàn)方式

 private void initWindows() {
  Window window = getWindow();
  int color = getResources().getColor(android.R.color.holo_blue_light);
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
     | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
   window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
     | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
     | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
   window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
   //設置狀態(tài)欄顏色
   window.setStatusBarColor(color);
   //設置導航欄顏色
   window.setNavigationBarColor(color);
   ViewGroup contentView = ((ViewGroup) findViewById(android.R.id.content));
   View childAt = contentView.getChildAt(0);
   if (childAt != null) {
    childAt.setFitsSystemWindows(true);
   }
  } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
   //透明狀態(tài)欄
   window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
   //透明導航欄
   window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
   //設置contentview為fitsSystemWindows
   ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
   View childAt = contentView.getChildAt(0);
   if (childAt != null) {
    childAt.setFitsSystemWindows(true);
   }
   //給statusbar著色
   View view = new View(this);
   view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(this)));
   view.setBackgroundColor(color);
   contentView.addView(view);
  }
 }

總結(jié):

 我這里為了更加明顯的顯示效果所以狀態(tài)欄背景色和標題欄顏色不一致,在實際的開發(fā)中一般情況下我們都會設置成統(tǒng)一的顏色,在視覺上感覺整個頁面更加統(tǒng)一,讓用戶真正沉浸在app中。

以上所述是小編給大家介紹的Android UI體驗之全屏沉浸式透明狀態(tài)欄效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Flutter實現(xiàn)漸變色加描邊字體效果

    Flutter實現(xiàn)漸變色加描邊字體效果

    這篇文章介紹了Flutter實現(xiàn)漸變色描邊字體效果的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-11-11
  • android自定義圓形倒計時顯示控件

    android自定義圓形倒計時顯示控件

    這篇文章主要為大家詳細介紹了android自定義圓形倒計時顯示控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Android Force Close 出現(xiàn)的異常原因分析及解決方法

    Android Force Close 出現(xiàn)的異常原因分析及解決方法

    本文給大家講解Android Force Close 出現(xiàn)的異常原因分析及解決方法,forceclose意為強行關(guān)閉,當前應用程序發(fā)生了沖突。對android force close異常分析感興趣的朋友一起通過本文學習吧
    2016-08-08
  • Android 不解壓直接讀取zip包的方法

    Android 不解壓直接讀取zip包的方法

    下面小編就為大家分享一篇Android 不解壓直接讀取zip包的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • FlowLayout流式布局實現(xiàn)搜索清空歷史記錄

    FlowLayout流式布局實現(xiàn)搜索清空歷史記錄

    這篇文章主要為大家詳細介紹了FlowLayout流式布局實現(xiàn)搜索清空歷史記錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android獲取驗證碼倒計時顯示效果

    Android獲取驗證碼倒計時顯示效果

    這篇文章主要為大家詳細介紹了Android獲取驗證碼顯示的兩種簡單實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Android開發(fā)自學路線圖

    Android開發(fā)自學路線圖

    這篇文章主要介紹了Android開發(fā)自學路線圖,本文講解的路線圖分為JAVA、Android基礎、Web基礎、Android項目4部份,是一個入門級學習路線圖,需要的朋友可以參考下
    2015-04-04
  • Android項目中g(shù)radle的執(zhí)行流程

    Android項目中g(shù)radle的執(zhí)行流程

    大家好,本篇文章主要講的是Android項目中g(shù)radle的執(zhí)行流程,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Android控件之RatingBar自定義星級評分樣式

    Android控件之RatingBar自定義星級評分樣式

    RatingBar為評分條控件,默認效果為若干個綠色的星星,如果想將其換成其他自定義圖片就要自定義它的style。接下來通過本文給大家介紹Android控件之RatingBar自定義星級評分樣式,感興趣的朋友一起學習吧
    2016-02-02
  • Flutter?StreamBuilder實現(xiàn)局部刷新實例詳解

    Flutter?StreamBuilder實現(xiàn)局部刷新實例詳解

    這篇文章主要為大家介紹了Flutter?StreamBuilder實現(xiàn)局部刷新實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論

信阳市| 万盛区| 阿拉尔市| 长岭县| 乌兰县| 吉安县| 泾源县| 常德市| 平陆县| 依兰县| 澎湖县| 湟中县| 牙克石市| 绥化市| 栾川县| 益阳市| 广州市| 东安县| 柘城县| 宣威市| 邻水| 乐至县| 民和| 延庆县| 社会| 库尔勒市| 临沧市| 射洪县| 寿宁县| 东至县| 鄱阳县| 临猗县| 临泽县| 天等县| 安顺市| 漳浦县| 青河县| 南乐县| 葵青区| 郎溪县| 东兰县|