前言
大年初十,相信许多人都已经过完年,在上班的路上或者已经上班了。在这里跟大家说一声:新年好~
新年新气象,今天打算写一篇关于Android新特性:Material Design
的文章。Material Design作为android 5.0的重头戏,说是新特性,但是其实已经算不上“新”了,毕竟android 6.0都出来了呢。
情人节刚过,我便以“秀恩爱”为主题,做一个新特性的使用例子。废话少说,下面开撸。
添加依赖
使用新特性需要添加依赖:
1 | compile 'com.android.support:design:23.0.1' |
新组件介绍
AppBarlayout
AppBarLayout是继承LinearLayout实现的一个ViewGroup容器组件,它是为了Material Design设计的App Bar,支持手势滑动操作。默认的AppBarLayout是垂直方向的,它的作用是把AppBarLayout包裹的内容都作为AppBar。
常用效果:将Toolbar 和Tablayout的组合部分共同构成 AppBar的效果。
CoordinatorLayout
CoordinatorLayout是一个增强型的FrameLayout。它的作用有两个:
- 作为一个布局的根布局
- 最后一个为子视图之间相互协调手势效果的一个协调布局
我们可以用过上滑将顶部的ToolBar移出屏幕,下滑时再显示。
NavigationView
用于侧滑菜单中的menu布局。
FloatingActionButton
悬浮按钮,给人一种Z轴的空间感。
SnackBar
当Snackbar在显示的时候,往往出现在屏幕的底部。为了给Snackbar留出空间,浮动操作按钮需要向上移动。
CardView
CardView继承自FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。CardView是一个Layout,可以布局其他View。
RecyclerView
RecyclerView用于展示数据集,与ListView、GridView类似,但是它更灵活。
SwipeRefreshLayout
Google官方推出的下拉刷新控件,使用非常简便。
布局文件
首先是activity_main布局文件:
1 |
|
看到content_main.xml:
1 |
|
ViewPager对应的fragment布局:
1 |
|
RecyclerView对应的Adapter布局:
1 |
|
抽屉对应的HeaderView布局:
1 |
|
相关说明
使用NavigationView时,通过
layout_gravity="left"
属性控制抽屉从左边打开。
抽屉内容填充对应于xml属性app:headerLayout与app:menu。1
2
3
4
5
6
7
8// 跳转到Menu的Toggle
ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_open);
mActionBarDrawerToggle.syncState();
drawerLayout.setDrawerListener(mActionBarDrawerToggle);
// 抽屉菜单填充内容
navigationView.inflateHeaderView(R.layout.header_navigation);
navigationView.inflateMenu(R.menu.menu_navigation);TabLayout与ViewPager关联。
1
2
3tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabsFromPagerAdapter(myViewPagerAdapter);SwipeRefreshLayout刷新设置颜色及刷新事件。
1
2
3swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh);
swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
swipeRefreshLayout.setOnRefreshListener(this);RecyclerView设置布局及Adapter。
1
2
3
4
5RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
adapter = new MyRecyclerViewAdapter(getActivity());
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(layoutManager);CoordinatorLayout可滑动的条件。
- CoordinatorLayout必须作为整个布局的父布局容器。
- 给需要滑动的组件设置 app:layout_scrollFlags=”scroll|enterAlways” 属性。 (ToolBar)
- 给你的可滑动的组件,也就是RecyclerView、ViewPager或者 NestedScrollView 设置属性:
app:layout_behavior=@string/appbar_scrolling_view_behavior
- 设置的layout_scrollFlags有如下几种选项:
- scroll: 所有想滚动出屏幕的view都需要设置这个flag- 没有设置这个flag的view将被固定在屏幕顶部。
- enterAlways: 这个flag让任意向下的滚动都会导致该view变为可见,启用快速“返回模式”。
- enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
- exitUntilCollapsed: 滚动退出屏幕,最后折叠在顶端。
在我的布局中给Toolbar设置了app:layout_scrollFlags属性,因此,Toolbar是可以滚动出屏幕,且向下滚动有可以出现。
最后
最终效果:
源码地址:https://github.com/LiJia92/showlove
Tips:本文只对这些新的特性做了最基本的说明及非常简单的使用,至于更加复杂的使用及效果,则需要在使用过程中慢慢发现、慢慢学习了。