Android Studio 全屏沉浸式透明狀態(tài)欄效果的實(shí)現(xiàn)
如何實(shí)現(xiàn)?1.)首先實(shí)現(xiàn)全屏
第一種:繼承主題特定主題
在Android API 19以上可以使用****.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中采用代碼的方式
Android 4.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);}
Android 5.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);}
2.)解決狀態(tài)欄占位問(wèn)題
第一種:主題添加如下設(shè)置
<item name='android:fitsSystemWindows'>true</item>
第二種:activity layout根目錄添加下面代碼
android:fitsSystemWindows='true'
第三種:通過(guò)Java代碼設(shè)置
rootview.setFitsSystemWindows(true);
3.)狀態(tài)欄導(dǎo)航欄設(shè)置背景色
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為fitsSystemWindowsViewGroup 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); }
4.)貼出整體java代碼實(shí)現(xiàn)方式
private void initWindows() { Window window = getWindow(); int color = getResources().getColor(R.color.wechatBgColor); 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(getResources().getColor(R.color.footerBgColor)); 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)航欄 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); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && useStatusBarColor) {//android6.0以后可以對(duì)狀態(tài)欄文字顏色和圖標(biāo)進(jìn)行修改 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } }
到此這篇關(guān)于Android Studio 全屏沉浸式透明狀態(tài)欄效果的文章就介紹到這了,更多相關(guān)Android Studio 全屏沉浸式透明狀態(tài)欄內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. python和websocket構(gòu)建實(shí)時(shí)日志跟蹤器的步驟2. 如何用Python一次性下載抖音上音樂(lè)3. ajax實(shí)現(xiàn)頁(yè)面的局部加載4. python實(shí)現(xiàn)MD5進(jìn)行文件去重的示例代碼5. 網(wǎng)頁(yè)中img圖片使用css實(shí)現(xiàn)等比例自動(dòng)縮放不變形(代碼已測(cè)試)6. 概述IE和SQL2k開發(fā)一個(gè)XML聊天程序7. python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類8. 刪除docker里建立容器的操作方法9. 詳解瀏覽器的緩存機(jī)制10. Python與C/C++的相互調(diào)用案例

網(wǎng)公網(wǎng)安備