【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android UI設(shè)計(jì)體驗(yàn)之全屏沉浸式透明狀態(tài)欄效果_第1頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android UI設(shè)計(jì)體驗(yàn)之全屏沉浸式透明狀態(tài)欄效果_第2頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android UI設(shè)計(jì)體驗(yàn)之全屏沉浸式透明狀態(tài)欄效果_第3頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android UI設(shè)計(jì)體驗(yàn)之全屏沉浸式透明狀態(tài)欄效果_第4頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android UI設(shè)計(jì)體驗(yàn)之全屏沉浸式透明狀態(tài)欄效果_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】AndroidUI設(shè)計(jì)體驗(yàn)之全屏沉浸式透明狀態(tài)欄效果。

前言:

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

首先現(xiàn)分清楚哪部分是狀態(tài)欄,哪部分是導(dǎo)航欄狀態(tài)欄StatusBar如下導(dǎo)航欄NavigationBar如下如何實(shí)現(xiàn)?

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

在AndroidAPI19以上可以使用****.TranslucentDecor***有關(guān)的主題,自帶相應(yīng)半透明效果,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中采用代碼的方式Android4.4以上可以添加如下代碼if

(Build.VERSION.SDK_INT

>=

Build.VERSION_CODES.KITKAT)

{//透明狀態(tài)欄window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明導(dǎo)航欄window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

}Android5.0以上也可以使用下面的代碼實(shí)現(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)此時(shí)狀態(tài)欄占有的位置消失,和app的布局疊在一起了,接下來解決這個(gè)問題第一種:主題添加如下設(shè)置<item

name="android:fitsSystemWindows">true</item>第二種:activitylayout根目錄添加下面代碼android:fitsSystemWindows="true"第三種:通過Java代碼設(shè)置rootview.setFitsSystemWindows(true);fitsSystemWindows只作用在sdk>=19的系統(tǒng)上就是高于4.4的系統(tǒng),這個(gè)屬性可以給任何view設(shè)置,只要設(shè)置了這個(gè)屬性此view的所有padding屬性失效.只有在設(shè)置了透明狀態(tài)欄(StatusBar)或者導(dǎo)航欄(NavigationBar)此屬性才會(huì)生效,如果上述設(shè)置了狀態(tài)欄和導(dǎo)航欄為透明的話,相當(dāng)于對(duì)該View自動(dòng)添加一個(gè)值等于狀態(tài)欄高度的paddingTop,和等于導(dǎo)航欄高度的paddingBottom,效果如下4.4以上的可以采用修改contentView的背景色,或者動(dòng)態(tài)添加一個(gè)view到contentView上

if

(Build.VERSION.SDK_INT

>=

Build.VERSION_CODES.KITKAT)

{

//透明狀態(tài)欄

window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

//透明導(dǎo)航欄

window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

//設(shè)置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);

}動(dòng)態(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);

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

/**

*

獲取導(dǎo)航欄高度

*

*

@param

context

context

*

@return

導(dǎo)航欄高度

*/

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)欄和導(dǎo)航欄的背景色

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);

//設(shè)置狀態(tài)欄顏色

window.setStatusBarColor(color);

//設(shè)置導(dǎo)航欄顏色

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);

}這樣總體效果就實(shí)現(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);

//設(shè)置狀態(tài)欄顏色

window.setStatusBarColor(color);

//設(shè)置導(dǎo)航欄顏色

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);

//透明導(dǎo)航欄

windo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論