一、ToolBar
1.1 概述
Google在2015的IO大会上发布了系列的Material
Design风格的控件。其中ToolBar是替代ActionBar的控件。由于ActionBar在各个安卓版本和定制Rom中的效果表现不一,导致严重的碎片化问题,ToolBar应运而生。
与ActionBar区别
显示效果跟ActionBar并没有区别。
优点:自定义视图的操作更加简单,状态栏的颜色可以调(Android 4.4以上)。
1.2 使用方法
1.2.1 导包(配置Gradle)
|
|
1.2.2 在AndroidManifest.xml设置此Activity的主题
|
|
注意:务必将ActionBar消除,否则Activity将会崩溃
1.2.3 重定义主题(颜色等信息)
Android 4.4及以上,在values文件夹中新建values-v19.xml,内容如下
Android 4.4以下:
|
|
1.2.4 ToolBarxml文件中定义
|
|
android:fitsSystemWindows="true"
防止ToolBar与StatusBar融合
1.2.5 java代码中实现
|
|
1.3 参考文章
http://blog.csdn.net/qq284565035/article/details/47086439
http://www.itstrike.cn/Question/9ae75549-b316-4844-938e-c22c0f4e6692.html
二、ActionBar
2.1 概述
ActionBar位于Activity的顶部,可用来显示activity的标题、Icon、Actions和一些用于交互的View。它也可被用于应用的导航。
ActionBar 是在Android 3.0(API
11)中加入到SK中的,想在低版本中使用ActionBar有两种选择:使用http://actionbarsherlock.com 或使用Support
Library v7。
图示:
其中,[1]是ActionBar的图标,[2]是两个action按钮,[3]是overflow按钮
2.2、使用方法
2.2.1低版本(API11)
开发API11以下的程序,首先必须在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类,否则将无法使用ActionBar。
2.2.1创建Actions
类似于Menu即可在java代码中添加,也可在xml文件中添加。下面贴上xml代码:
|
|
说明:
- showAsAction 属性(定义每个 Action 是如何显示的)
- always 表示永远显示在 ActionBar 中,如果屏幕空间不够则无法显示
- ifRoom 表示屏幕空间够的情况下显示在 ActionBar 中,不够的话就显示在 overflow 中
- never 则表示永远显示在 overflow 中
在java代码中,通过重写onCreateOptionsMenu,以使用上面的menu
2.2.2 Action的按钮交互
如果一个Action被单击,对于activity中的onOptionsItemSelected()将被调用。
|
|
说明:
onCreateOptionsMenu() 只会被调用一次。若想改变 Menu,可以调用 invalidateOptionsMenu(),这会使 onCreateOptionsMenu() 将会再次被调用。
2.3 自定义ActionBar
2.3.1 隐藏与显现
|
|
2.3.2 改变title
|
|
2.3.3 隐藏导航
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
2.3.4 使用全屏模式
对于Android 4.4 (API 19)应用程序可以使用全屏模式,代码如下
|
|
2.3.4 使用Split action bar
启用split action bar可在 AndroidManifest.xml 中定义 android:uiOptions="SplitActionBarWhenNarrow"
参阅 http://blog.csdn.net/lsdmx2016/article/details/17415911
2.4 在Fragment中给action bar添加action
在 onCreate() 中调用 setHasOptionsMenu(true)。Android Framework 会调用 Fragement 中的 onCreateOptionsMenu() 来向 Activity 的 Menu 中添加 item。
2.5 动态设置action bar
2.5.1 自定义View
|
|
2.5.2 Action View(示例见参考文章)
Action View 控件可以替换 Action bar 的 Action 按钮图标。可以利用这个特点将某个 Action 项替换成一个 ProgressBar。可通过android:actionLayout
或 android:actionViewClass
来定义一个布局文件或Widg来作为 Action 的 action view。
2.5.3 Action Provider(示例见参考文章)
Action Provider 提供了在单个组件里提供多种交互方式的方法。它可以用来创建 action view,动态弹出子 menu,处理 action 调用事件。基类为 ActionProvider 目前 Android 平台提供两种 action provider:MediaRouteActionProvider
和 ShareActionProvider。 下面以一个例子计算 ShareActionProvider 的用法。使用这个 action provider 可以让程序从注册了 Intent.ACTION_SEND 的 Intent 中获取。
2.6 使用程序图标导航
2.6.1 使用程序图标作为 home icon
Action Bar的左侧图标称为home icon,可为这个图标设置一个Action。推荐做法是当按了这个图标,返回到Home Activity中。
>
actionBar.setHomeButtonEnabled(true);//或者使用actionBar.setDisplayHomeAsUpEnabled(true);
在onOptionsMenuItemSelected() 中使用android.R.id.home并启用actionbar的HomeIcon
case android.R.id.home:
2.7 参考文章:
1、http://blog.csdn.net/bigconvience/article/details/28886241
特别说明
1、Android Studio 中按照默认的 Activity 启动时,不显示 ActionBar 的问题
在Eclipse新建一个 MainActivity extends Activity 时,能够正常显示 ActionBar,如图:
但在 AS 中 extends Activity,不显示 ActionBar,如图
但在 AS 中 extends ActionBarActivity,能够正常显示 ActionBar,但是会显示该类过时
推荐使用 extends AppCompatActivity
同样的代码在 Eclipse 和 Android Studio 中会出现较大差异,需要区别对待。
AppCompatActivity 是为了兼容性考虑!造成这种差异的原因是主题的问题!!!
在主题方面,还有很多不懂,今后加强学习
(参考文章:http://m.blog.csdn.net/article/details?id=46858249)
三、StatusBar
StatusBar 是一个半透明阴影,View 可以伸展到其后面。
四、NavigationBar
NavigationBar 一般是纯黑不能使用的。Google 提供 NavigationBar 的透明与使用的可能,却没有推荐使用。个人觉得是为了给
Bottom navigation 做准备。这里不讨论 Bottom navigation 的优劣(我是 Bottom navigation 黑)。
4.1 兼容性
android 从 4.4 开始,开始支持UI使用 StatusBar 与 NavigationBar 的范围。
4.2 沉浸式体验
4.3 使用实例
4.3.1 style 配置
在 value 中的 styles.xml 中设置:
在 value-v19 中的 styles.xml 中设置(为了兼容4.4)
在 value-v21 中的 styles.xml 中设置