2019重新Android回顾 UI控制之全屏篇

许多内容我们使用全屏展示时会得到更好的体验,如“游戏”,“视频”,“图片”,“书籍”,“幻灯片”。

当你使用全屏模式最大化屏幕的应用空间时,一定要注意用户可能的跳出检查系统通知,或者进行快速搜索的频率。当开启全屏模式时,会导致用户无法迅速使用系统导航,所以当用户体验的好处大于额外操作的可能时,我们才使用全屏模式。

实现全屏3种操作:

1.Lean back倾斜模式

Lean back多用于观看视频时,当用户想要恢复系统栏时,只需要点击屏幕。

调用setSystemUiVisibility()传递SYSTEM_UI_FLAG_FULLSCREEN andSYSTEM_UI_FLAG_HIDE_NAVIGATION.,当系统栏显示时会接收到一个回调,用于更新UI,参考Responding to UI Visibility Changes

2.Immersive沉浸式模式

用于用户需要大量屏幕操作,如“游戏”,“图片观看”,“书籍阅读”,“幻灯片演示”。当用户需要系统栏时,只需要从隐藏系统栏的边缘滑动就可以,而不需要担心其他屏幕操作,影响用户体验。

调用setSystemUiVisibility()传递SYSTEM_UI_FLAG_IMMERSIVE 配置选项 SYSTEM_UI_FLAG_FULLSCREEN andSYSTEM_UI_FLAG_HIDE_NAVIGATION

这种模式同样用于,有自己的控件也需要与系统栏同步显示或隐藏。例如触摸屏幕上的任何位置切换工具栏或调色板的外观,那么它还应切换系统栏的外观。

3.Sticky immersive粘性沉浸式模式

常规沉浸式,当滑动屏幕边缘时,系统都会负责显示系统栏,而应用程序却无法获得手势操作事件,对于频繁需要滑动的游戏应用来说,这部分的体验就会非常糟糕,所以应该使用Sticky immersive。

在粘性沉浸式模式下,如果用户使用系统栏从边缘滑动,系统栏会出现,但它们是半透明的,并且触摸手势会传递到您的应用程序,因此应用程序也可以响应手势。

在使用此方法的绘图应用程序中,如果用户想要绘制从屏幕最边缘开始的线条,则从边缘滑动会显示系统条栏并开始绘制从边缘开始的线条。几秒钟没有交互后,或者一旦用户触摸或手势在系统栏外的任何位置,系统栏会自动消失

调用setSystemUiVisibility()传递SYSTEM_UI_FLAG_IMMERSIVE_STICKY配置选项 SYSTEM_UI_FLAG_FULLSCREEN andSYSTEM_UI_FLAG_HIDE_NAVIGATION


UI标签除了,还有SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 和SYSTEM_UI_FLAG_LAYOUT_STABLE。为防止当系统栏隐藏或显示时影响应用布局调整大小。 您还应确保同时隐藏操作栏和其他UI控件。


@Override

public void onWindowFocusChanged(boolean hasFocus) {    

    super.onWindowFocusChanged(hasFocus);    

    if (hasFocus) {        

        hideSystemUI();    

    }

}


private void hideSystemUI() {    

    //使用常规immersive模式,SYSTEM_UI_FLAG_IMMERSIVE     

    //使用 "lean back" 模式,移除 SYSTEM_UI_FLAG_IMMERSIVE.    

    //"sticky immersive"模式, SYSTEM_UI_FLAG_IMMERSIVE_STICKY    

    View decorView = getWindow().getDecorView();    

    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE           

    // 设置内容显示在系统栏之下,系统栏显示或者隐藏,内容大小不发生变化

    |     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);

}

// 显示所有系统栏只需要移除除了用于设置内容显示在系统栏之下的标签即可。

private void showSystemUI() {    

    View decorView = getWindow().getDecorView();    

    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE            

    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION            

    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

}


更好的用户体验:

1.要在状态之间提供无缝转换,请保持所有UI控件的可见性与系统栏同步。 应用程序进入沉浸式模式后,任何UI控件也应与系统栏一起隐藏,然后在系统UI重新出现时再次出现。继承View.OnSystemUiVisibilityChangeListener接收回调,参考Responding to UI Visibility Changes

2.继承onWindowFocusChanged(),如果您获得了窗口焦点,您可能需要重新隐藏系统栏。 如果您失去了窗口焦点,例如由于显示在您的应用上方的对话框或弹出菜单,您可能希望取消之前使用Handler.postDelayed或类似内容安排的任何待处理“隐藏”操作。

3.继承GestureDetector,来监听onSingleTapUp(MotionEvent)以便控制触摸内容区域来显示或隐藏系统栏。


参考代码:

Android ImmersiveMode Sample

Android BasicImmersiveMode Sample

Android AdvancedImmersiveMode Sample

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容