状态栏、标题栏、导航栏的了解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiuweitianhu_12345/article/details/81540390

状态栏:是指手机左上最顶上,显示中国移动、安全卫士、电量、网速等等,在手机的顶部。下拉就会出现通知栏。

标题栏:是指一个APP程序最上部的titleBar,从名字就知道它显然就是一个应用程序一个页面的标题了,例如打开QQ消息主页,最上面显示消息那一栏就是标题栏。

导航栏:是手机最下面的返回,HOME,主页三个键,有些是一个按钮。

实现方式一:主题设置

隐藏标题栏:@android:style/Theme.Light.NoTitleBar  明亮的效果 或@android:style/Theme.NoTitleBar黑色的效果

隐藏状态栏和标题栏:@android:style/Theme.NoTitleBar.Fullscreen黑色效果或@android:style/Theme.Light.NoTitleBar.Fullscreen白色效果

实现方式二: 代码设置

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 隐藏标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 隐藏状态栏 
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN); 

        setContentView(R.layout.activity_main);
    }
}

实现方式三:通过设置主题中的属性

<style name="AppTheme" parent="AppBaseTheme">

        <!-- 隐藏状态栏 -->
        <item name="android:windowFullscreen">true</item>
        <!-- 隐藏标题栏 -->
        <item name="android:windowNoTitle">true</item>

    </style>

附加知识:设置activity的透明效果,当A>B>C  再从C返回B返回A时,B会闪一下,这是界面重绘造成的,当将B设置成透明后,A的重绘就有时间,执行是会回到B但B是透明状态,显示的是C,给出A绘制时间,让A平稳的展示,

这只是我自的一个理解,具体使用时再具体查。

<style name="activityTheme" parent="AppTheme">
        <item name="android:windowIsTranslucent">true</item>
    </style>

实现方式四 :通过窗口管理器设置状态栏的显示隐藏

findViewById(R.id.btn_show).setOnClickListener(
                new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // 显示状态栏
                        WindowManager.LayoutParams attr = getWindow()
                                .getAttributes();
                        attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
                        getWindow().setAttributes(attr);
                    }
                });
        findViewById(R.id.btn_hide).setOnClickListener(
                new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        //隐藏状态栏
                        WindowManager.LayoutParams lp = getWindow()
                                .getAttributes();
                        lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
                        getWindow().setAttributes(lp);
                    }
                });

附加知识:

Window 是一个抽象类,表示一个窗口,它的具体实现类是 PhoneWindow,实现位于 WindowManagerService 中。

WindowManagerService 就是位于 Framework 层的窗口管理服务,它的职责就是管理系统中的所有窗口。

Window 有三种类型,分别是应用 Window子 Window 和系统 Window,应用类 Window 对应一个 Acitivity,子 Window 不能单独存在,需要依附在特定的父 Window 中,比如常见的一些 Dialog 就是一个子 Window。我们对 Window 的操作是通过 WindowManager 来完成的,WindowManager 是一个接口,它继承自只有三个方法的 ViewManager 接口:

方式五:通过设置activity界面的view

 View类提供了setSystemUiVisibility和getSystemUiVisibility方法,这两个方法实现对状态栏的动态显示或隐藏的操作,以及获取状态栏当前可见性。

setSystemUiVisibility方法传入的实参分析:

   setSystemUiVisibility(int visibility)方法可传入的实参为:

    1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。
    2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。
    3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。
    4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。
    5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。
    8. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。

导航栏home键的禁用:

https://blog.csdn.net/jiuweitianhu_12345/article/details/53693489

总结自:

https://www.jb51.net/article/112718.htm

参考:

https://blog.csdn.net/yhaolpz/article/details/68936932

猜你喜欢

转载自blog.csdn.net/jiuweitianhu_12345/article/details/81540390