一、首先介绍一下Android的屏幕,如上图所示,Android屏幕大致分为三个部分:通知栏、内容区、导航栏。
1、通知栏位于屏幕顶部,也用于显示电量、时间等状态,所以也是statusbar(状态栏)。
2、内容区上方可以分割出一个栏,最开始叫titlebar,只是放置APP的标题用。Android4.1开始,里面会加入显示更多的东西,进化为actionbar(操作栏),里面会放置例如文件系统的 save、delete按钮。在之后的发展中逐渐使用toolbar,它可以作为导航键代替actionbar(如图中的返回按钮),toolbar可以方便的放置在页面的任意位置。
二、源码中
在settings源码中有这样一段:isToolbarEnabled
追踪代码:
看到这里的时候有了疑问,为什么其他的activity都是默认的true,只有恢复出厂设置的activity是false,这个到底起到什么样的作用?
从这段代码来看,判断条件是当 isToolbarEnabled==true 并且当前不是安装向导时,使用的是 R.layout.collapsing_toolbar_base_layout 这个资源文件,否则使用的是 R.layout.settings_base_layout 资源文件。
当 isToolbarEnabled==false 或者当前是安装向导时,要将操作栏隐藏。隐藏时的效果图如下:
当为true,或者不隐藏时是这样的:
🆗,现在isToolbarEnabled的作用已经明确了,又有了新的疑问,为什么会有两个布局文件,这两个有什么区别?
继续追踪代码发现,R.layout.collapsing_toolbar_base_layout 这个资源文件位于frameworks/base/packages/SettingsLib/CollapsingToolbarBaseActivity的res下,R.layout.settings_base_layout 资源文件就是位于Settings的res下,两个资源文件内部是一样的,但是在framworks下除了资源文件外,还有具体的控制这个工具栏的activity。
CollapsingToolbarBaseActivity是一个Activity类,
CollapsingToolbarBaseFragment是一个Fragment类。
看代码:
CollapsingToolbarBaseFragment类用于静态加载fragment。(静态加载一旦添加就不能在运行时删除)
而CollapsingToolbarBaseActivity类用于启动activity时加载对应的布局文件。
两个类中都有一个disableCollapsingToolbarLayoutScrollingBehavior方法,用于在使用这个布局时禁止拖动该布局页面。代码如下: