




下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合股賣水泥合同范本
- 勞務(wù)分包單位合同范本
- 勞務(wù)合同范本車輛
- 微信租房合同范本
- 與單位簽正式合同范本
- 廠內(nèi)車間出租合同范本
- 化肥生產(chǎn)合同范本
- 做建設(shè)合同范本
- 合同范本嬰兒車
- 分期付款機(jī)器買賣合同范本
- 地質(zhì)構(gòu)造和構(gòu)造地貌 -【公開課教學(xué)PPT課件】高中地理
- 道路建筑材料電子教案(全)
- 《尹定邦設(shè)計(jì)學(xué)概論》試題及答案
- 黃河流域生態(tài)保護(hù)和高質(zhì)量發(fā)展知識(shí)競(jìng)賽試題及答案(共52題)
- 1、1~36號(hào)元素電子排布式、排布圖
- 國(guó)網(wǎng)新聞宣傳與企業(yè)文化管理專責(zé)題庫(kù)匯總-下(判斷、簡(jiǎn)答題)
- 職業(yè)衛(wèi)生調(diào)查表
- 某安裝公司績(jī)效考核標(biāo)準(zhǔn)表
- 免疫學(xué)檢測(cè)技術(shù)的基本原理優(yōu)秀課件
- 2023年北京市實(shí)驗(yàn)動(dòng)物上崗證培訓(xùn)考試題庫(kù)完美精編版
- 第一講 文化概論
評(píng)論
0/150
提交評(píng)論