<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • Android沉浸式狀態欄

          2018-4-2    seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          隨著越來越的的app使用沉浸式狀態欄,有必要對沉浸式狀態欄學習一下,查看了很多資料,沉浸式狀態欄重要的無法三點:1.實現全屏 (Android4.4跟5.0全屏處理方式有別需分開處理 )2.設置全屏之后為了保證自己寫的布局不與狀態欄重疊,需要在跟xml的跟布局設置android:fitsSystemWindows=”true” ?;谶@幾點處理方式可能很多,但是為了便于項目中工具類封裝,本編實現方式均已代碼方式呈現,xml設置方式可以自行查閱相關資料 3.改變狀態欄顏色

          —1.全屏設置 
          對于4.4以上系統,因4.4以上系統是可以設置全屏,代碼如下:

          window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 
          
          • 1
          • 2

          對于5.0系統 具體代碼

          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_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
          
          • 1
          • 2
          • 3
          • 4
          • 5

          僅僅做全屏處理,我們會發現不管是在4.4系統上還是在5.0系統上,我們的布局內容會與狀態欄內容出現重疊。

          下圖為4.4系統 
          這里寫圖片描述

          下圖為8.0系統 
          這里寫圖片描述

          為了解決全屏設置重疊狀態欄,我們需要在全屏之上預留狀態欄的高度以便正常顯示狀態欄,而處理方式也很簡單 activity layout根目錄添加下面代碼 
          android:fitsSystemWindows=”true” 而此處我建議用代碼設置,因為通常我們項目中會提取BaseActivity基類抽出一些共性,這種方式比在每個xml中設置屬性更方便 
          rootView.setFitsSystemWindows(true) 此處的rootView指的就是activity對應的跟布局; 
          進行以上處理之后我們會發現現在狀態欄跟我們的布局內容不再重疊了,接下來我們就只需要處理狀態欄的顏色問題了。具體代碼如下

          ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
                          childView.setFitsSystemWindows(true); } 
          
          • 1
          • 2
          • 3
          • 4
          • 5

          對于4.4系統因為沒有改變狀態欄顏色的api,我們可以通過添加一個與狀態欄等高的View到根布局的父容器中,而根布局的父容器就是一個ID為android.R.id.content的幀布局被裝飾的容器中,這樣只需要設置View的顏色即可。對于5.0及以上系統,因已提供設置狀態欄和導航欄顏色的api,直接設置即可; 
          對于4.4以上5.0一下系統

          View view=new View(this); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusHeight())); view.setBackgroundColor(Color.RED); content.addView(view); 
          
          • 1
          • 2
          • 3
          • 4

          對于5.0及以上系統

          window.setStatusBarColor(Color.RED); 
          
          • 1

          獲取狀態欄高度

           private int getStatusHeight() { int statusHeight=-1; int resourceId=getResources().getIdentifier("status_bar_height","dimen","android"); if(resourceId>0){ return getResources().getDimensionPixelSize(resourceId);
                  } return 0;
              } 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8

          以上就是實現沉浸式狀態欄的具體過程。整體代碼如下:

          package com.example.administrator.myjavadeamo.activity; import android.graphics.Color; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import com.example.administrator.myjavadeamo.R; public class StatusBarActivity extends AppCompatActivity {
          
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//隱藏標題欄 setContentView(R.layout.activity_status_bar); initWindow(); }
          
              private void initWindow() {
                  Window window=getWindow(); if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
                      //5.0以上的手機
                      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_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
                          childView.setFitsSystemWindows(true); }
                      window.setStatusBarColor(Color.GREEN); }else if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
                      //4.4以上5.0一下的手機
                      window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
                          childView.setFitsSystemWindows(true); }
          
                      View view=new View(this); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusHeight())); view.setBackgroundColor(Color.GREEN); content.addView(view); }
              } /**
               * 獲取狀態欄高度
               * @return
               */ private int getStatusHeight() {
                  int statusHeight=-1; int resourceId=getResources().getIdentifier("status_bar_height","dimen","android"); if(resourceId>0){
                     return getResources().getDimensionPixelSize(resourceId); }
                  return 0; }
          }  
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34
          • 35
          • 36
          • 37
          • 38
          • 39
          • 40
          • 41
          • 42
          • 43
          • 44
          • 45
          • 46
          • 47
          • 48
          • 49
          • 50
          • 51
          • 52
          • 53
          • 54
          • 55
          • 56
          • 57
          • 58
          • 59
          • 60
          • 61
          • 62
          • 63
          • 64
          • 65
          • 66
          • 67

          最終實現結果:

          4.4系統 
          4.4以上5.0一下系統 
          8.0系統

          5.0以上系統

          藍藍設計m.sdgs6788.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://m.sdgs6788.com

          存檔

          99久久国产综合精品网成人影院| 青青久久精品国产免费看| 久久精品中文字幕无码绿巨人| 九九精品99久久久香蕉| 国产99久久久久久免费看| 久久伊人中文无码| 久久ww精品w免费人成| 国产高潮久久免费观看| 欧美日韩精品久久久久| 精品久久久久久综合日本| 亚洲一本综合久久| 偷偷做久久久久网站| 伊人久久综在合线亚洲2019| 欧美日韩精品久久久免费观看| 日韩精品久久久久久| 色狠狠久久AV五月综合| 久久精品国产一区二区电影| 激情伊人五月天久久综合| 久久久国产视频| 久久午夜无码鲁丝片午夜精品| 人妻精品久久久久中文字幕69| 人妻精品久久久久中文字幕| 精品久久久久久综合日本| 日本强好片久久久久久AAA| 亚洲精品国产第一综合99久久| 久久久久中文字幕| 久久福利青草精品资源站免费| 亚洲日韩中文无码久久| 少妇久久久久久被弄到高潮| 久久久久久A亚洲欧洲AV冫 | 久久精品国产亚洲AV蜜臀色欲| 久久精品国产精品青草| 国产精品99精品久久免费| 久久久久亚洲av无码专区导航| 久久久亚洲AV波多野结衣 | 欧美喷潮久久久XXXXx| 午夜福利91久久福利| 97视频久久久| 无码八A片人妻少妇久久| 亚洲精品美女久久777777| 香蕉久久av一区二区三区|