bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

公司主營(yíng)業(yè)務(wù):網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出柳州免費(fèi)做網(wǎng)站回饋大家。

效果。

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

導(dǎo)航欄問(wèn)題

在Android中,頂部導(dǎo)航欄目前常用的兩種實(shí)現(xiàn)方式,一個(gè)是通過(guò)Toolbar,一個(gè)是通過(guò)自定義View的方式來(lái)實(shí)現(xiàn)。兩種方式各有利弊。Toolbar為官方指定規(guī)范,開發(fā)者使用更方便,但可拓展性差,對(duì)于一些特殊的展示效果無(wú)法實(shí)現(xiàn),而通過(guò)自定義方式的方式,可以支持更多展示效果,但卻需要我們寫更多的代碼。兩種方式在實(shí)現(xiàn)狀態(tài)欄沉浸上也有所差別。

去掉Title

Toolbar默認(rèn)主題會(huì)具有一個(gè)title,當(dāng)我們使用Toolbar的時(shí)候,而沒有去掉title,應(yīng)用則會(huì)crash,報(bào)出如下所示錯(cuò)誤。

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

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

<item name="windowNoTitle">true</item>

當(dāng)然我們也可以通過(guò)代碼動(dòng)態(tài)去掉title,但當(dāng)我們的主題從Theme.AppCompat作為父類繼承的時(shí)候,通過(guò)代碼并不可以去掉title。

自定義導(dǎo)航欄

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

當(dāng)我們未設(shè)置windowNoTitle屬性的時(shí)候,在導(dǎo)航欄之上有title。顯然和我們要實(shí)現(xiàn)導(dǎo)航欄的沉浸式有所違背,因此實(shí)現(xiàn)對(duì)于導(dǎo)航欄的沉浸,

<item name="windowNoTitle">true</item>該配置是必不可少的。

設(shè)置狀態(tài)欄透明

去掉title之后,是否我們就可以實(shí)現(xiàn)上述的效果了呢?

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

這個(gè)時(shí)候,我們發(fā)現(xiàn)狀態(tài)欄還是黑色,并沒有沉浸,需要我們將狀態(tài)欄設(shè)置為透明。

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

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

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

解決導(dǎo)航欄上移問(wèn)題

這個(gè)時(shí)候,Toolbar被整體上移了,導(dǎo)致其部分功能也進(jìn)入了狀態(tài)欄之下,包括導(dǎo)航欄的內(nèi)容也到了狀態(tài)欄位置之中,顯然這是不符合我們最初的要求的。如何解決這個(gè)問(wèn)題?我們?cè)赥oolbar中添加fitSystemWindows屬性,即可使得toolbar的上部空出一個(gè)高度,使得Toolbar內(nèi)容部分脫離狀態(tài)欄。

 <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.Toolbar>

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

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

自定義導(dǎo)航欄與之實(shí)現(xiàn)類似。

fitsSystemWindows屬性

前面對(duì)Toolbar的設(shè)置是在Toolbar中添加的fitSystemWindows屬性,那么當(dāng)我們將其屬性添加到Toolbar所在的最外層的布局會(huì)怎么樣呢?

<RelativeLayout
  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">

  <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.Toolbar>

</RelativeLayout>

執(zhí)行之后,可以看到和之前未設(shè)置狀態(tài)欄透明時(shí)的效果相同。

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

那么這個(gè)fitSystemWindows工作的原理是什么呢?通過(guò)上述實(shí)驗(yàn),不難發(fā)現(xiàn),對(duì)于沉浸狀態(tài)欄的控制,該屬性起到了一個(gè)很關(guān)鍵的作用。

接下來(lái)通過(guò)一個(gè)實(shí)驗(yàn)來(lái)驗(yàn)證下,該屬性所起的作用,在Toolbar所在的布局中,在布局的底部添加一個(gè)Button.

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.Toolbar>

  <Button
    android:text="Test"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorAccent"
    android:layout_alignParentBottom="true"/>

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

當(dāng)我們將該屬性設(shè)置到按鈕上,又會(huì)發(fā)生什么呢?

<Button
    android:text="Test"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorAccent"
    android:layout_alignParentBottom="true"/>

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

通過(guò)比較可以很明顯的看出,設(shè)置了 fitsSystemWindows 屬性的View在其上部被設(shè)置了一個(gè)padding。根據(jù)之前做的實(shí)驗(yàn),我們可以知道當(dāng)我們?cè)O(shè)置了窗口狀態(tài)欄透明之后,整個(gè)內(nèi)容視圖會(huì)向上移動(dòng)了一個(gè)狀態(tài)欄的高度,而當(dāng)前為該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高度和狀態(tài)欄的高度,我們可以得到如下日志。

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

通過(guò)實(shí)驗(yàn)我們可以得出結(jié)論, fitSystemWindows 屬性會(huì)對(duì)所設(shè)置的View增加一個(gè)top padding,因此當(dāng)我們?cè)趯?shí)現(xiàn)讓導(dǎo)航欄沉浸的時(shí)候,設(shè)置窗口狀態(tài)欄的透明會(huì)使得視圖整體上移,而借助 fitSystemWindows 屬性的功能,為視圖中最頂部的View設(shè)置一個(gè)和狀態(tài)欄高度相同的padding,使得導(dǎo)航欄不會(huì)被頂?shù)綘顟B(tài)欄內(nèi)。

當(dāng)我們?cè)谝粋€(gè)視圖中,多個(gè)View設(shè)置該屬性時(shí),發(fā)現(xiàn)只有第一個(gè)設(shè)置該屬性的View會(huì)起作用,在視圖布局上,自上而下的第一個(gè)View其作用。層級(jí)上則為最頂級(jí)的View上首先其作用。因此其功能歸納為:

  • 為設(shè)置該屬性的View增加一個(gè)和狀態(tài)欄高度相同的toppadding
  • 當(dāng)視圖中有多個(gè)View被設(shè)置了該屬性,那么只布局上最頂部的View起作用

5.0及其以上

至此,我們可以完美的實(shí)現(xiàn)一個(gè)狀態(tài)欄的沉浸,上述的實(shí)現(xiàn)是在Android 4.4版本上,在視圖的最上部,會(huì)有一個(gè)黑色漸變的陰影,而在5.0設(shè)備上的展示效果如下所示,在狀態(tài)欄上整個(gè)都會(huì)有一個(gè)陰影。當(dāng)然不同廠家對(duì)此也有自己的一些優(yōu)化,比如魅族在4.4上是不具有陰影的。

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

對(duì)于5.0及其之上,官方提供了對(duì)狀態(tài)欄顏色控制的相應(yīng)API,我們可以通過(guò)代碼來(lái)控制狀態(tài)欄的顏色,實(shí)現(xiàn)如下效果。

Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄

實(shí)現(xiàn)代碼

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

據(jù)此可以看出,當(dāng)我們?cè)?.0及其之上的實(shí)現(xiàn)中,可以不用進(jìn)行狀態(tài)欄透明的設(shè)置和 fitSystemWindows 屬性的設(shè)置,直接通過(guò)代碼來(lái)控制,但為了適應(yīng)4.4版本,建議在代碼中仍然按之前的方式實(shí)現(xiàn),如果想在5.0及其高版本中實(shí)現(xiàn)去陰影,再手動(dòng)在代碼中控制。

上述就是小編為大家分享的Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:Android應(yīng)用怎么實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄
文章URL:http://vcdvsql.cn/article38/pdigpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)站改版品牌網(wǎng)站設(shè)計(jì)虛擬主機(jī)手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司