Android 5.0 Lollipop 推出了 Material Design 安卓界面风格的设计理念并且给出了一个 Material Design 的兼容库,库中包含了navigation drawer view,输入控件的悬浮标签,悬浮操作按钮,snackbar,选项卡等清新的新控件,以及将这些控件结合在一起的手势滚动框架,本篇对系列控件的使用进行介绍。
1. Navigation View
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/id_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
tools:context="hobby.com.myapplication_05_md.MainActivity">
<!-- 第一个子view 将会是主布局 -->
<!-- 第二个子view 就是抽屉中布局,可以是NavigationView,也可以是其他View,比如ListView -->
<android.support.design.widget.NavigationView
android:id="@+id/id_navigation_view"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/item_header"
app:menu="@menu/navi_menu">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
2. TextInputLayout ,包裹一个EdtiView后,它的hint 会自动加上动画,并且可以设置一些像密码状态开关的icon (app:passwordToggleEnabled)之类的提示符
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:passwordToggleEnabled="true">
<EditText
android:id="@+id/edt_01"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="#11ff0000"
android:gravity="start"
android:hint="hint"
android:inputType="textPassword"
/>
</android.support.design.widget.TextInputLayout>
3. Floating Action Button,一个悬浮小按钮
<android.support.design.widget.FloatingActionButton
android:id="@+id/id_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
app:rippleColor="@color/colorPrimary"
/>
5. Snackbar 升级版的 Toast
Snackbar.make(viewParent,"fab click!", Snackbar.LENGTH_SHORT).setAction("undo?", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}).show();
6. TabLayout
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top"
app:tabTextColor="@color/white">
@BindView(R.id.id_tab_layout)
TabLayout mTabLayout;
mTabLayout.addTab(mTabLayout.newTab().setText("ITEM ONE"));
mTabLayout.addTab(mTabLayout.newTab().setText("ITEM TWO"));
mTabLayout.addTab(mTabLayout.newTab().setText("ITEM THREE"));
7. CoordinatorLayout(协调者布局),通过给它的子View设置各种Behavior 标志,使子View 间相互协调
举个栗子, CoordinatorLayout 和 the app bar:
①. 给RecyclerView (或者其它可以滑动的View)增加 app:layout_behavior=”@string/appbar_scrolling_view_behavior”
②. 给 AppBarLayout 的childView 设置相应的 scrollFlags 来指定:当①中指定的支持滚动的View (下简称指定View)滚动时,AppBarLayout 的子View 要如何做出协调,
scroll: childView 将随着指定View 的滚动而被滚动出/入屏幕,没有设置此flag 的childView 将被固定在屏幕顶部
enterAlways: AchildView 不可见时,指定View 的向下滚动事件会先把childView 滚下来,之后再是指定View 内容的滚动
enterAlwaysCollapsed: childView 设置了最小高度(minHeight)且添加了enterAlways flag 时才有效;当childView 不可见时,指定View 的向下滚动都会先把childView 滚下来,滚到minHeight 之后,向下滚动的就是指定View 内容,指定View 的内容滚完后,继续把childView 滚下来直到完全展开
exitUntilCollapsed: 发生向上滚动事件时,childView 向上滚动直到可见高度为minHeight 时固定下来,不再滚动
详情可参考http://www.jianshu.com/p/7caa5f4f49bd
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/id_toolbar"
android:title="@string/toolbar"
android:background="@android:color/holo_blue_dark"
android:layout_width="match_parent"
android:layout_height="150dp"
android:minHeight="48dp"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"/>
<android.support.design.widget.TabLayout
android:id="@+id/id_tab_layout"
app:tabTextColor="@android:color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/id_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>