付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】AndroidUI设计体验之全屏沉浸式透明状态栏效果。
前言:
Android4.4之后谷歌提供了沉浸式全屏体验,在沉浸式全屏模式下,状态栏、虚拟按键动态隐藏,应用可以使用完整的屏幕空间,按照Google的说法,给用户一种身临其境的体验。而Android5.0之后谷歌又提出了ColorPalette的概念,让开发者可以自己设定系统区域的颜色,使整个App的颜色风格和系统的颜色风格保持统一。今天学习总结一下如何实现Android4.4以上全屏沉浸式透明状态栏效果。先看下预期效果:
首先现分清楚哪部分是状态栏,哪部分是导航栏状态栏StatusBar如下导航栏NavigationBar如下如何实现?
第一种:继承主题特定主题
在AndroidAPI19以上可以使用****.TranslucentDecor***有关的主题,自带相应半透明效果,Theme.Holo.NoActionBar.TranslucentDecor和Theme.Holo.Light.NoActionBar.TranslucentDecor两种主题为新增加的,所以要新建values-v19文件夹并创建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)
{//透明状态栏window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}Android5.0以上也可以使用下面的代码实现全屏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);
}全屏效果不难发现此时状态栏占有的位置消失,和app的布局叠在一起了,接下来解决这个问题第一种:主题添加如下设置<item
name="android:fitsSystemWindows">true</item>第二种:activitylayout根目录添加下面代码android:fitsSystemWindows="true"第三种:通过Java代码设置rootview.setFitsSystemWindows(true);fitsSystemWindows只作用在sdk>=19的系统上就是高于4.4的系统,这个属性可以给任何view设置,只要设置了这个属性此view的所有padding属性失效.只有在设置了透明状态栏(StatusBar)或者导航栏(NavigationBar)此属性才会生效,如果上述设置了状态栏和导航栏为透明的话,相当于对该View自动添加一个值等于状态栏高度的paddingTop,和等于导航栏高度的paddingBottom,效果如下4.4以上的可以采用修改contentView的背景色,或者动态添加一个view到contentView上
if
(Build.VERSION.SDK_INT
>=
Build.VERSION_CODES.KITKAT)
{
//透明状态栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//设置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);
}动态获取StatusBarHeight函数如下
/**
*
获取状态栏高度
*
*
@param
context
context
*
@return
状态栏高度
*/
private
static
int
getStatusBarHeight(Context
context)
{
//
获得状态栏高度
int
resourceId
=
context.getResources().getIdentifier("status_bar_height",
"dimen",
"android");
return
context.getResources().getDimensionPixelSize(resourceId);
}动态获取NavigationBarHeight函数如下
/**
*
获取导航栏高度
*
*
@param
context
context
*
@return
导航栏高度
*/
public
static
int
getNavigationBarHeight(Context
context)
{
int
resourceId
=
context.getResources().getIdentifier("navigation_bar_height",
"dimen",
"android");
return
context.getResources().getDimensionPixelSize(resourceId);
}然后Android5.0以上谷歌提供了新的api可以更新状态栏和导航栏的背景色
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);
//设置状态栏颜色
window.setStatusBarColor(color);
//设置导航栏颜色
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);
}这样总体效果就实现了
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);
//设置状态栏颜色
window.setStatusBarColor(color);
//设置导航栏颜色
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)
{
//透明状态栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
windo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1.6 解决简单的周期问题(分层作业) 人教版数学(2024)二年级下册(含答案)
- 2026年南阳科技职业学院单招职业适应性考试题库附参考答案详解(夺分金卷)
- 2026年包头铁道职业技术学院单招职业技能考试题库附答案详解(巩固)
- 2026年兰州航空职业技术学院单招职业技能考试题库附参考答案详解(黄金题型)
- 2026年北京科技大学天津学院单招职业技能测试题库附参考答案详解(巩固)
- 2026年南昌交通学院单招职业适应性测试题库及答案详解(网校专用)
- 2026年内江职业技术学院单招职业技能考试题库带答案详解(基础题)
- 2026年兰州资源环境职业技术大学单招职业倾向性考试题库及答案详解(夺冠系列)
- 某省市某省市及公共服务平台解决方案
- 液化气体生产工常识水平考核试卷含答案
- 2026年《必背60题》党校教师高频面试题包含详细解答
- 安全监察队伍培训班课件
- 儿科用药错误PDCA根因与改进
- 2026年青岛港湾职业技术学院单招综合素质笔试备考试题附答案详解
- 2025年重庆基层法律服务考试真题及答案
- 《化肥产品生产许可证实施细则(一)》(复肥产品部分)
- 2026年人教部编版小学四年级语文下册教学计划(含进度表)
- 2025年吉林省纪委监委公开遴选公务员笔试试题及答案解析
- 农业服务中心培训课件
- 肺挫伤合并肋骨骨折护理
- 在学习进阶中促进学生语言与思维协同发展
评论
0/150
提交评论