欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Dialog全屏,去掉状态栏的方式

程序员文章站 2022-05-28 14:07:03
dialog即使设置全屏了,但还是有状态栏占用高度这;直接将下面这行代码放到你的dialog中即可 @override protected void onstart() { super.onstar...

dialog即使设置全屏了,但还是有状态栏占用高度这;

直接将下面这行代码放到你的dialog中即可

 @override
 protected void onstart() {
  super.onstart();
  int uioptions = view.system_ui_flag_hide_navigation
    | view.system_ui_flag_layout_stable
    | view.system_ui_flag_hide_navigation
    | view.system_ui_flag_layout_hide_navigation
    | view.system_ui_flag_immersive
    | view.system_ui_flag_fullscreen;
  this.getwindow().getdecorview().setsystemuivisibility(uioptions);
 }

顺便说下自定义dialog宽高:

windowmanager.layoutparams attributes = getwindow().getattributes();
  attributes.width = width;
  attributes.height = height;
  getwindow().setattributes(attributes);

添加两个基本的style

 <!--普通dialog样式-->
 <style name="customerdialog" parent="@android:style/theme.dialog">
  <item name="android:windowframe">@null</item>
  <item name="android:windowisfloating">true</item>
  <item name="android:windowistranslucent">true</item>
  <item name="android:windownotitle">true</item>
  <item name="android:background">@android:color/transparent</item>
  <!-- <item name="android:windowanimationstyle">@android:style/animation.translucent</item> -->
  <item name="android:windowbackground">@android:color/transparent</item>
  <item name="android:windowsoftinputmode">statehidden|adjustpan</item>
 </style>


 <!--透明背景dialog样式-->
 <style name="transparentdialogstyle" parent="@android:style/theme.dialog">
  <item name="android:windowbackground">@android:color/transparent</item>
  <item name="android:windownotitle">true</item>
  <item name="android:backgrounddimenabled">false</item>
 </style>

补充知识:android关于全屏设置和隐藏状态栏、沉浸式状态栏的总结

1.全屏和推出全屏

实现全屏

getwindow().setflags(windowmanager.layoutparams.flag_fullscreen,windowmanager.layoutparams.flag_fullscreen);

有一个view.setlayoutparams的方法,注意这个layoutparams跟的不是自身的layoutparams而是父容器的layoutparams

退出全屏

final windowmanager.layoutparams attrs = getwindow().getattributes();
   attrs.flags &= (~windowmanager.layoutparams.flag_fullscreen);
   getwindow().setattributes(attrs);
   getwindow().clearflags(windowmanager.layoutparams.flag_layout_no_limits);

2.隐藏状态栏

getwindow().getdecorview().setsystemuivisibility(view.invisible);

参数:

view.system_ui_flag_visible:显示状态栏,activity不全屏显示(恢复到有状态的正常情况)。

view.invisible:隐藏状态栏,同时activity会伸展全屏显示。

view.system_ui_flag_fullscreen:activity全屏显示,且状态栏被隐藏覆盖掉。

view.system_ui_flag_layout_fullscreen:activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,activity顶端布局部分会被状态遮住。

view.system_ui_flag_layout_hide_navigation:效果同view.system_ui_flag_layout_fullscreen

view.system_ui_layout_flags:效果同view.system_ui_flag_layout_fullscreen

view.system_ui_flag_hide_navigation:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。

view.system_ui_flag_low_profile:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。

3.沉浸式状态栏(android4.4开始引进)

(1).通过systembartintmanager

 if (build.version.sdk_int >= build.version_codes.kitkat) {
  settranslucentstatus(true);
  systembartintmanager tintmanager = new systembartintmanager(this);
  tintmanager.setstatusbartintenabled(true);
  tintmanager.setstatusbartintresource(r.color.color_top_bg);// 通知栏所需颜色
  }

    @targetapi(19)
 private void settranslucentstatus(boolean on) {
 window win = getwindow();
 windowmanager.layoutparams winparams = win.getattributes();
 final int bits = windowmanager.layoutparams.flag_translucent_status;
 // windowmanager.layoutparams.flag_translucent_navigation
 if (on) {
  winparams.flags |= bits;
 } else {
  winparams.flags &= ~bits;
 }
 win.setattributes(winparams);
 }

(2).通过顶部增加同actionbar颜色的view(如果设置后出现tittlebar则在清单文件里面配置activity的style为notittlebar)

 window window = getwindow(); 
 window.addflags(windowmanager.layoutparams.flag_translucent_status);
 viewgroup decorview = (viewgroup) window.getdecorview();
 view = new view(this);
 view.setlayoutparams(new viewgroup.layoutparams(
  viewgroup.layoutparams.match_parent, getstatusbarheight(this)));
 view.setbackgroundcolor(getresources().getcolor(r.color.color_top_bg));
 decorview.addview(view);

以上这篇dialog全屏,去掉状态栏的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。