Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲小说欧美另类激情,国产1区2区三区不卡,中文字幕或区

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Android沉浸式狀態欄實現

          應用市場上App越來越多的出現沉浸式狀態欄的設計(如下圖所示)狀態欄和導航欄具有相同的顏色。Android在4.4開始對于該種效果的支持,而在4.4之下,狀態欄只是黑框,無法控制。同時在4.4和5.0及其之上的版本對該種效果的支持又有所差異,因此要實現該種效果,可以將4.4歸為一類,5.0及其之上歸為一類。接下來,我們將一步步來在4.4和5.0及其之上來實現如下所示效果。

          導航欄問題

          在Android中,頂部導航欄目前常用的兩種實現方式,一個是通過Toolbar,一個是通過自定義View的方式來實現。兩種方式各有利弊。Toolbar為官方指定規范,開發者使用更方便,但可拓展性差,對于一些特殊的展示效果無法實現,而通過自定義方式的方式,可以支持更多展示效果,但卻需要我們寫更多的代碼。兩種方式在實現狀態欄沉浸上也有所差別。

          去掉Title

          因此在使用Toolbar 的時候,我們需要style中添加如下屬性配置

          true

          當然我們也可以通過代碼動態去掉title,但當我們的主題從Theme.作為父類繼承的時候,通過代碼并不可以去掉title。

          當我們未設置屬性的時候,在導航欄之上有title。顯然和我們要實現導航欄的沉浸式有所違背,因此實現對于導航欄的沉浸,

          true該配置是必不可少的。

          設置狀態欄透明

          去掉title之后,是否我們就可以實現上述的效果了呢?

          這個時候,我們發現狀態欄還是黑色,并沒有沉浸,需要我們將狀態欄設置為透明。

          true
          

          該屬性只有在在4.4和高于4.4版本上可以進行該屬性的配置,但是在更低版本上則無法使用。配置該屬性之后,執行效果如下圖所示。

          解決導航欄上移問題

          這個時候,Toolbar被整體上移了,導致其部分功能也進入了狀態欄之下,包括導航欄的內容也到了狀態欄位置之中,顯然這是不符合我們最初的要求的。如何解決這個問題?我們在Toolbar中添加屬性,即可使得toolbar的上部空出一個高度,使得Toolbar內容部分脫離狀態欄。

           
              
          

          得到我們最終想要得到的效果

          自定義導航欄與之實現類似。

          屬性

          前面對Toolbar的設置是在Toolbar中添加的屬性,那么當我們將其屬性添加到Toolbar所在的最外層的布局會怎么樣呢?

          android 沉浸式通知欄_沉浸式狀態欄xposed模塊_手機的沉浸式狀態欄

          xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.example.netease.toolbardemo.activity.ToolbarActivity">

          執行之后,可以看到和之前未設置狀態欄透明時的效果相同。

          那么這個工作的原理是什么呢?通過上述實驗,不難發現,對于沉浸狀態欄的控制,該屬性起到了一個很關鍵的作用。

          接下來通過一個實驗來驗證下,該屬性所起的作用,在Toolbar所在的布局中,在布局的底部添加一個Button.

          
              
              

          當我們將該屬性設置到按鈕上,又會發生什么呢?

           

          通過比較可以很明顯的看出,設置了屬性的View在其上部被設置了一個padding。根據之前做的實驗,我們可以知道當我們設置了窗口狀態欄透明之后,整個內容視圖會向上移動了一個狀態欄的高度,而當前為該View增加的padding的大小是不是和其高度相同呢?

           Button btn = (Button) findViewById(R.id.test_btn);
           Log.i("padding", btn.getPaddingTop()+"");
           Rect frame = new Rect();
           getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
           Log.i("height", frame.top+"");

          獲取按鈕的padding高度和狀態欄的高度,我們可以得到如下日志。

          通過實驗我們可以得出結論,屬性會對所設置的View增加一個top padding,因此當我們在實現讓導航欄沉浸的時候,設置窗口狀態欄的透明會使得視圖整體上移,而借助屬性的功能,為視圖中最頂部的View設置一個和狀態欄高度相同的padding,使得導航欄不會被頂到狀態欄內。

          當我們在一個視圖中,多個View設置該屬性時,發現只有第一個設置該屬性的View會起作用,在視圖布局上,自上而下的第一個View其作用。層級上則為最頂級的View上首先其作用。因此其功能歸納為:

          5.0及其以上

          至此,我們可以完美的實現一個狀態欄的沉浸,上述的實現是在Android 4.4版本上,在視圖的最上部,會有一個黑色漸變的陰影,而在5.0設備上的展示效果如下所示,在狀態欄上整個都會有一個陰影。當然不同廠家對此也有自己的一些優化,比如魅族在4.4上是不具有陰影的。

          對于5.0及其之上,官方提供了對狀態欄顏色控制的相應API,我們可以通過代碼來控制狀態欄的顏色,實現如下效果。

          實現代碼

            if(Build.VERSION.SDK_INT >= 21) {
                      Window window = getWindow();
                      //取消設置透明狀態欄,使 ContentView 內容不再沉浸到狀態欄下
                      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                      //需要設置這個 flag 才能調用 setStatusBarColor 來設置狀態欄顏色
                      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                      //設置狀態欄顏色
                      window.setStatusBarColor(getResources().getColor(R.color.yx_red));
                  }

          據此可以看出,當我們在5.0及其之上的實現中,可以不用進行狀態欄透明的設置和屬性的設置,直接通過代碼來控制,但為了適應4.4版本,建議在代碼中仍然按之前的方式實現,如果想在5.0及其高版本中實現去陰影,再手動在代碼中控制。


          主站蜘蛛池模板: 在线电影一区二区| 在线精品亚洲一区二区三区| 视频精品一区二区三区| 久久久久成人精品一区二区| 一区二区传媒有限公司| 国产亚洲3p无码一区二区| 美日韩一区二区三区| 寂寞一区在线观看| 国产高清在线精品一区二区| 欧美日韩精品一区二区在线视频 | 亚洲国产精品一区二区九九 | 国产精品综合AV一区二区国产馆| 清纯唯美经典一区二区| 久久AAAA片一区二区| 亚洲AV无码一区二三区 | 欧洲精品码一区二区三区免费看 | a级午夜毛片免费一区二区| 无码欧精品亚洲日韩一区夜夜嗨| 综合一区自拍亚洲综合图区| 夜夜精品视频一区二区| 亚洲一区中文字幕在线电影网| 国产精品特级毛片一区二区三区| 精品一区二区久久| 精品一区二区三区东京热| 精品人妻中文av一区二区三区| 亚洲第一区香蕉_国产a| 亚洲国产日韩一区高清在线 | 国产在线精品一区在线观看| 另类国产精品一区二区| 国精产品999一区二区三区有限| 亚洲熟女乱色一区二区三区| 国产小仙女视频一区二区三区| 丝袜美腿一区二区三区| 国产麻豆精品一区二区三区| 国内精品视频一区二区三区| 日本夜爽爽一区二区三区| 一区二区三区视频免费| 精品乱人伦一区二区三区| 国产精品视频一区二区三区| 多人伦精品一区二区三区视频| 亚洲国产精品一区二区三区久久|