gpt4 book ai didi

Android 实现沉浸式状态栏的方法

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Android 实现沉浸式状态栏的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

沉浸式状态栏的来源就是很多手机用的是实体按键,没有虚拟键,于是开了沉浸模式就只有状态栏消失了。于是沉浸模式成了沉浸式状态栏.

我们先来看下具体的效果 。

Android 实现沉浸式状态栏的方法

开启沉浸模式后,状态栏消失,从顶部向下滑动,状态栏出现,退出沉浸模式,状态栏也出现了.

我们的代码基于前一篇文章。首先是两个开启沉浸模式和关闭沉浸模式的函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@suppresslint ( "newapi" )
public static void hidesystemui(view view) {
  view.setsystemuivisibility(view.system_ui_flag_layout_stable
  | view.system_ui_flag_layout_hide_navigation
  | view.system_ui_flag_layout_fullscreen
  | view.system_ui_flag_hide_navigation
  | view.system_ui_flag_fullscreen
  | view.system_ui_flag_immersive_sticky);
}
 
@suppresslint ( "newapi" )
public static void showsystemui(view view) {
  view.setsystemuivisibility(
  view.system_ui_flag_layout_stable
   | view.system_ui_flag_layout_hide_navigation
   | view.system_ui_flag_layout_fullscreen);
}

这些代码可以在google的开发者文档中找到,可以看这里using immersive full-screen mode,上面的代码是在android 4.4中才会生效,对应的android版本兼容的判断请自行处理.

此外还需要一个辅助函数,用于获得状态栏高度,使用反射获得.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
  * 获状态栏高度
  *
  * @param context 上下文
  * @return 通知栏高度
  */
public int getstatusbarheight(context context) {
  int statusbarheight = 0 ;
  try {
  class <?> clazz = class .forname( "com.android.internal.r$dimen" );
  object obj = clazz.newinstance();
  field field = clazz.getfield( "status_bar_height" );
  int temp = integer.parseint(field.get(obj).tostring());
  statusbarheight = context.getresources().getdimensionpixelsize(temp);
  } catch (exception e) {
  e.printstacktrace();
  }
  return statusbarheight;
}

点击hide按钮进入沉浸模式,也就是隐藏状态栏,隐藏状态栏的同时我们需要修改toolbar的上内边距,否则会显得很难看,这里注册一个监听onsystemuivisibilitychangelistener,当进入沉浸模式后我们改变toolbar的上内边距 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
hide.setonclicklistener( new view.onclicklistener() {
  @override
  public void onclick(view v) {
  view view = getwindow().getdecorview();
  hidesystemui(view);
  mtoolbar.setonsystemuivisibilitychangelistener( new view.onsystemuivisibilitychangelistener() {
  @override
  public void onsystemuivisibilitychange( int visibility) {
  mtoolbar.setpadding(mtoolbar.getpaddingleft(), 0 ,mtoolbar.getpaddingright(), mtoolbar.getpaddingbottom());
  }
  });
  }
});

进入沉浸模式后,手指从屏幕顶部向下划,状态栏就出现了,过2秒左右它又会自动消失.

点击show按钮退出沉浸模式,同时toolbar的内边距也要增加到状态栏的高度.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
show.setonclicklistener( new view.onclicklistener() {
  @override
  public void onclick(view v) {
  view view = getwindow().getdecorview();
  showsystemui(view);
  mtoolbar.setonsystemuivisibilitychangelistener( new view.onsystemuivisibilitychangelistener() {
  @override
  public void onsystemuivisibilitychange( int visibility) {
  mtoolbar.setpadding(mtoolbar.getpaddingleft(), getstatusbarheight(mainactivity. this ),mtoolbar.getpaddingright(), mtoolbar.getpaddingbottom());
  }
  });
  }
});

具体效果见上方的效果图.

如果使用的是systembartintmanager这个类进行的状态栏的着色,除上方的操作外,还要在对应的监听里增加状态栏着色的禁止和启动的功能.

进入沉浸模式,要禁用 。

?
1
tintmanager.setstatusbartintenabled( false );

退出沉浸模式,要启动 。

?
1
tintmanager.setstatusbartintenabled( true );

如果你想更加平滑,则可以对padding的改成增加动画,具体动画效果自行添加.

切记在使用沉浸模式前记得判断android的版本。system_ui_flag_immersive_sticky只能在大于等于api level 19使用。你要兼容低版本的同时使用沉浸模式。在使用system_ui_flag_immersive_sticky之前先用android.os.build.version.sdk_int来判断当前的系统版本是否是android4.4以上,如果是就启用代码,如果不是则跳过不执行.

以上就是本文的全部内容,希望大家喜欢.

最后此篇关于Android 实现沉浸式状态栏的方法的文章就讲到这里了,如果你想了解更多关于Android 实现沉浸式状态栏的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com