Android 控制系统UI
来源:互联网 发布:护眼显示器 知乎 编辑:程序博客网 时间:2024/05/21 18:41
在实际应用中我们经常要控制系统的UI,比如顶部栏等,来达到预期的效果,如何控制系统UI呢? 让我们一探究竟
使 系统的Bar 不可见
让 System bar 变的不可见,只有在 Android 4.0 之后的版本可以。
这种效果并不是完全的隐藏 System bar,而是 dim,就是当没有触摸事件的时候,慢慢隐藏,一旦用户产生输入,则再次显示 reveal
渐隐
使用 以下代码 达到目的:
// 代码中设定的是view,也就是可以让点击恢复的viewView decorView = getActivity().getWindow().getDecorView();int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE;decorView.setSystemUiVisibility(uiOptions);
要注意的是,每次用户点击界面,都会清除这个 SYSTEM.UI.FLAG_LOW_PROFILE
, 如果你需要再次隐藏,那么你必须再次设置flag
如果需要程序性的设置 重新显示,而不是接触touch,可以如下:
View decorView = getActivity().getWindow().getDecorView();// Calling setSystemUiVisibility() with a value of 0 clears// all flags.decorView.setSystemUiVisibility(0);
隐藏 Status Bar 和 navigation Bar
在android4.0以下的版本隐藏
两种方式:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ...</application>
或者
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.activity_main); } ...}
在 4.0 之上的版本
View decorView = getWindow().getDecorView();// 隐藏状态条int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;decorView.setSystemUiVisibility(uiOptions);// 如果你隐藏了你的状态条,那么一定记着也要影藏你的 导航条ActionBar actionBar = getActionBar();actionBar.hide();
值得注意的几点:
- 一旦 UI flag 被清除了,那么你需要 重置
- (重要)使用 UI flag 造成变化,但是如果你把代码写在
onCreate()
方法中,如果用户 重新打开 Activity的时候,onCreate
方法是不会调用的。所以最好是写在onResume
或者onWindowFocusChanged
方法中 setSystemUIVisibility
这个方法调用,只有当你的view是可见的时候,才有效- 从View 导航离开会到时 flag 被清除
隐藏底部导航条
基本和隐藏顶部的是一样的,就是对应的flag不同
Android 4.4 之后的 沉浸式 全屏幕模式
android 4.4 之后,可以使用 SYSTEM_UI_FLAG_IMMERSIVE
这个flag 来使你的app 实现真正的 全屏幕,这个flag是结合 隐藏底部导航条,和隐藏头部状态条两个的。
当这个状态开启之后,你的app还是接受所有的触摸事件,你可以设置 SYSTEM_UI_FLAG_IMMERSIVE_STICKY
利用这个flag,可以设置过几分钟后再次自动的隐藏
如果你使用的是 SYSTEM_UI_FLAG_IMMERSIVE
那么它是根据你如何设置其他的flag来决定隐藏的效果的
其他的一些flags,是为了在隐藏和显示中间,避免 内容 resizing
private void hideSystemUI() { // Set the IMMERSIVE flag. // Set the content to appear under the system bars so that the content // doesn't resize when the system bars hide and show. mDecorView.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 // hide nav bar | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | View.SYSTEM_UI_FLAG_IMMERSIVE);}private void showSystemUI() { mDecorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}
粘性沉浸
如果有手势操作,那么bars会以半透明的形式显示出来,然后一会又会自动的隐藏起来
@Overridepublic void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { 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);}}
屏幕的变化是可监控的
只要注册函数 View.OnSystemUiVisibilityChangeListener
到你的view就可以了
- Android 控制系统UI
- Android通过SeekBar控制系统音量
- 控制系统
- 控制系统
- Android AudioManager控制系统声音的流程(-)
- Android AudioManager控制系统声音的流程
- Android AudioManager控制系统声音的流程 zt
- Android AudioManager控制系统声音的流程
- Android AudioManager控制系统声音的流程
- 基于Android智能终端的远程控制系统
- 基于Android智能终端的远程控制系统
- android 命令行控制系统core service启动停止
- android 修改源码控制系统虚拟按键显示
- Android AudioManager控制系统声音的流程
- Android底层控制系统设置的命令集合
- Android版本控制系统及其间的差异
- android用wakelock控制系统不进入standby
- Android底层控制系统设置的命令集合
- 'django-admin.py' is not recognized as an internal or external command
- python的dataframe删除原来索引,重新建立从0开始的索引
- Hint用法
- POJ 2631 Roads in the North(村庄最大距离,树的直径,经典题目)
- 关于svn(客户端)在安装完成过程中所遇到的一点问题
- Android 控制系统UI
- CocoaPods报错:The dependency `AFNetworking ` is not used in any concrete target
- QT4(4.8.5)转QT5(5.5.0)
- 【看书】邻接表的创建与使用
- 高性能MySQL笔记160802001
- 滑雪 解题报告
- POJ 1383--Labyrinth【树的直径】
- SVN教程
- keytool用法总结