Android----------------沉浸式模式
来源:互联网 发布:停车位设计软件 编辑:程序博客网 时间:2024/04/28 16:10
具体打开连接
沉浸式就是要给用户提供完全沉浸的体验,使用户有一种置身于虚拟世界之中的感觉。
隐藏状态栏
一个Android应用程序的界面上其实是有很多系统元素的,观察下图:
可以看到,有状态栏、ActionBar、导航栏等。而打造沉浸式模式的用户体验,就是要将这些系统元素全部隐藏,只留下主体内容部分。
在布局文件中加入一张图片,使图片充满全屏
android:scaleType="fitXY"
隐藏状态栏:
MainActivity中的代码:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View decorView = getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(option); ActionBar bar = getSupportActionBar(); bar.hide(); }}这里先调用getWindow().getDecorView()方法获取到了当前界面的DecorView,然后调用它的setSystemUiVisibility()方法来设置系统UI元素的可见性。其中,SYSTEM_UI_FLAG_FULLSCREEN表示全屏的意思,也就是会将状态栏隐藏。另外,根据Android的设计建议,ActionBar是不应该独立于状态栏而单独显示的,因此状态栏如果隐藏了,我们同时也需要调用ActionBar的hide()方法将ActionBar也进行隐藏。
效果图:
透明状态栏效果(类似于饿了么那样的状态栏效果,而不是直接把整个系统状态栏给隐藏掉(显示电量、时间等))
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (Build.VERSION.SDK_INT >= 21) { View decorView = getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(option); getWindow().setStatusBarColor(Color.TRANSPARENT);}ActionBar actionBar = getSupportActionBar();actionBar.hide();
效果图:
隐藏导航栏
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);View decorView = getWindow().getDecorView();int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;decorView.setSystemUiVisibility(option);ActionBar actionBar = getSupportActionBar();actionBar.hide();
这里我们同时使用了SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN,这样就可以将状态栏和导航栏同时隐藏了。现在重新运行一下程序,效果如图所示。
这次看上去好像终于是完全全屏化了,但其实上这离真正的沉浸式模式还差得比较远,因为在这种模式下,
我们触摸屏幕的任意位置都会退出全屏。
除了隐藏导航栏之外,我们同样也可以实现和刚才透明状态栏类似的效果,制作一个透明导航栏:
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (Build.VERSION.SDK_INT >= 21) { View decorView = getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(option); getWindow().setNavigationBarColor(Color.TRANSPARENT); getWindow().setStatusBarColor(Color.TRANSPARENT);}ActionBar actionBar = getSupportActionBar();actionBar.hide();
这里使用了SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION,表示会让应用的主体内容占用系统导航栏的空间,
然后又调用了setNavigationBarColor()方法将导航栏设置成透明色。现在重新运行一下程序,效果如下图所示。
真正的沉浸式模式
除了像游戏或者视频软件这类特殊的应用,大多数的应用程序都是用不到沉浸式模式的。
当你确定要使用沉浸式模式,那么只需要重写Activity的onWindowFocusChanged()方法,然后加入如下逻辑即可:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus && Build.VERSION.SDK_INT >= 19) { 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 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } }}
沉浸式模式的UI Flag就这些,也没什么好解释的,如果你需要实现沉浸式模式,直接将上面的代码复制过去就行了。需要注意的是,只有在Android 4.4及以上系统才支持沉浸式模式,因此这里也是加入了if判断。效果如下:可以看到,界面默认情况下是全屏的,状态栏和导航栏都不会显示。而当我们需要用到状态栏或导航栏时,
只需要在屏幕顶部向下拉,或者在屏幕下侧向上拉,状态栏和导航栏就会显示出来,此时界面上任何元素的
显示或大小都不会受影响。过一段时间后如果没有任何操作,状态栏和导航栏又会自动隐藏起来,重新回到全屏状态。
这就是最标准的沉浸式模式。
阅读全文
0 0
- Android 沉浸式模式
- Android----------------沉浸式模式
- Android 沉浸式模式
- Android,沉浸式模式
- Android中沉浸式模式
- Android沉浸式模式,体验真正的沉浸式
- android状态栏标题栏的沉浸式模式
- android沉浸式应用(模式)
- Android沉浸式模式的实现
- Android状态栏之沉浸式模式
- Android通知栏沉浸式模式
- 沉浸式全屏模式(Android 4.4)
- Android沉浸模式
- Android 沉浸模式开发
- Android 沉浸模式
- android 沉浸模式记录
- Android状态栏沉浸模式
- Android沉浸模式,沉浸式顶栏,变色龙状态栏
- 使用tensorflow:LSTM神经网络预测股票(一)
- SSH框架的搭建(二)
- jQ 编写插件
- bzoj 1565: [NOI2009]植物大战僵尸
- iOS11 自定义tabbar图标出现重影问题
- Android----------------沉浸式模式
- 关于刷单的技术实现和行业环境、潜规则了解
- angular 跳转
- JVM--基本原理
- Android 自定义画圆控件,非常酷炫
- Apache common-lang: ArrayUtils
- js 时间相关的一些函数
- 配置底盘机器人与笔记本通讯中遇到的问题
- 【Oracle】SQL/92 执行多个表的连接