从Android 5.0开始,Android正式进入扁平化的时代,使用一种新的Meterial Design设计风格,开始支持多种设备。从Android 5.0开始,不再使用Dalvik虚拟机,而是完全的ART,提高了加载速度;增加了省电模式,提高了系统的性能。
从这一节开始,我将从Android 5.0开始,介绍Android发展至今的各个版本的新性能,虽然Android 5.0至今已经过了很长时间,但是还有很多当时的新特性活跃在如今的APP中。
1、悬浮式的Notification
这个特性在如今的APP中,尤其是在消息通知中,使用的最多,就是悬浮式的通知栏,我们在使用各类APP的时候,当其他APP有消息推送的时候,在屏幕上方,就有消息通知栏,像微信的消息弹出窗,这个时候,它不会抢占屏幕的焦点,我们可以对当前屏幕操作,还可以拉动移除这个通知栏。
在Android 8.0之后,悬浮窗又更新新的特性,所以我就先放到后面Android 8.0的时候再拿出来讲解。
2、DrawerLayout + NavigationView
看过我博客的应该知道,在之前的项目中,我有使用到这个布局,就是创建侧拉菜单时,使用的抽屉布局,之前的博客有详细介绍,就不在此说明了。
除此之外,还有ViewPager
+ TabLayout
、RecyclerView
这些Android 5.0的产物,在之前的项目中都有详细介绍,就不在此一一说明。
3、ToolBar
Android 5.0推出的导航控件,用来代替之前的ActionBar;ToolBar的出现,主要是用来做标题页面。像之前的项目中,有用过include
标签来作为标题栏,那么现在来介绍一下ToolBar。
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorDark"
app:navigationIcon="@drawable/ic_icon_left"
app:title="标题"
app:subtitle="子标题"
app:logo="@drawable/ic_launcher_background"
app:titleTextColor="@color/colorAccent"
app:subtitleTextColor="@color/colorPrimary">
</androidx.appcompat.widget.Toolbar>
又到了熟悉的属性介绍环节:
(1)navigationIcon
:添加左侧导航按钮,一般是返回按钮。
(2)title
、subtitle
:标题和子标题
titleTextColor
、subtitleTextColor
:设置标题、子标题的颜色。
(3)logo
:设置logo
(4)设置menu
在项目中创建一个Menu菜单,然后设置几个Menu。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu1"
android:icon="@drawable/ic_search"
android:title="按钮1"
app:showAsAction="ifRoom"
></item>
<item android:id="@+id/menu2"
android:icon="@drawable/ic_icon_left"
android:title="按钮2"
app:showAsAction="ifRoom"
></item>
<item android:id="@+id/menu3"
android:icon="@drawable/ic_icon_left"
android:title="按钮3"
app:showAsAction="ifRoom"
></item>
<item android:id="@+id/menu4"
android:icon="@drawable/ic_icon_left"
android:title="按钮4"
app:showAsAction="ifRoom"
></item>
</menu>
从下图中可以看出,showAsAction
有几个值:
----always
:不管ToolBar
还剩多少空间,都要显示在ToolBar
上
----ifRoom
:先在ToolBar上显示,如果剩余的没有空间显示,就放在溢出菜单里。
----never
:不管是否剩余空间,都存在溢出列表中
通过代码动态加载menu
菜单。
tool.inflateMenu(R.menu.tool_menu);
(5)折叠视图
在menu菜单的5个属性中,有一个属性是collapseActionView
这个属性就是代表折叠属性视图,首先在toolbar中设置。
app:collapseIcon="@drawable/ic_category"
然后修改menu菜单中第一个search的图标。
<item android:id="@+id/menu1"
android:icon="@drawable/ic_search"
android:title="按钮1"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView"></item>
(6)Menu的单击事件
tool.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
});
这个在之前NavigationView中,设置menu菜单时的使用方法一致,可以看之前的博客。
(7)设置返回按钮的单击事件
app:navigationIcon="@drawable/ic_icon_left
tool.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Android5Activity.this,"单击了返回",Toast.LENGTH_SHORT).show();
}
});
(8)设置子View布局
<androidx.appcompat.widget.Toolbar
android:id="@+id/tool"
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="@color/colorDark"
app:navigationIcon="@drawable/ic_icon_left"
app:title="标题"
app:subtitle="子标题"
app:titleTextColor="@color/colorAccent"
app:subtitleTextColor="@color/colorBlack"
app:logo="@drawable/ic_launcher_background"
app:collapseIcon="@drawable/ic_category">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题"
android:textSize="20dp"
android:textColor="@color/colorBlack"
android:gravity="center"
></TextView>
</androidx.appcompat.widget.Toolbar>
设置子View,当做标题居中显示
4、FloatingActionButton
和Snackbar
FloatingActionButton是Android 5.0推出的一个继承自ImagView的控件,具备浮动效果,在设置属性中,elevation
就是设置控件浮动的阴影特效。
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorBlue"
android:elevation="10dp"
app:fabSize="normal"
app:pressedTranslationZ="16dp"
android:layout_alignParentBottom="true"></com.google.android.material.floatingactionbutton.FloatingActionButton>
SnackBar则是类似Toast的使用效果,但是更灵活一些。
Snackbar.make(rl,"点击了Button", Snackbar.LENGTH_LONG)
.setAction("取消", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Android5Activity.this,"取消",Toast.LENGTH_SHORT).show();
}
}).show();
在使用SnackBar的时候,需要一个显示的父布局,我这里使用的是该界面的相对布局,其他的和Toast的使用方式一致,可以设置Action
。
5、TextInputLayout
和TextInputEditText
跟之前EditText
不同的是,之前EditText
的hint
在输入的时候,就会消失,但是使用TextInputEditText
就会将hint移到上方。