在Google提供的控件中,在support-design及v4,v7包中,存在着很多符合MD标准的控件,这里罗列出一些常用的控件
TextInputLayout
这个控件在作为输入框的时候是极其方便及好用的,结合EditText使用
1 |
|
SearchView
搜索功能,位于ActionBar的位置
首先需要编写menu布局
1 |
|
然后复写onCreateOptionsMenu()
方法
1 | public class MainActivity extends AppCompatActivity { |
Toolbar
顶部导航栏。用于显示标题,返回,菜单等,最开始是使用的ActionBar
由于ActionBar的种种使用不便,再加上拓展性差,google后来推出了Toolbar,为了增强其功能,现在还有APPbar可供使用
首先还是要把主题设置为NoActionBar
1 | <resources> |
然后使用Toolbar布局,由于ToolBar继承自ViewGroup,所以其是一个容器
1 |
|
最后设置Toolbar到活动,并设置监听
1 | public class MainActivity extends AppCompatActivity { |
接下来实现Toolbar的隐藏效果
这样的效果实现思路就是Toolbar在上层,后面的布局在下层,后面的布局设置padding,然后再滑动过程中监听滑动距离,设置Toolbar的透明度
1 | interface TranslucentListener { |
自定义ScrollView,在onScrollChanged()
中监听
1 | public class MyScrollView extends ScrollView { |
最后在活动中回调
1 | public class MainActivity extends AppCompatActivity implements TranslucentListener{ |
贴出布局android:clipToPadding="false"
该控件的绘制范围是否不在Padding里面。false:绘制的时候范围会考虑padding即会往里面缩进android:clipChildren="false"
子控件是否能不超出padding的区域(比如ScrollView上滑动的时候,child可以滑出该区域)
1 |
|
CoordinatorLayout
监听滑动控件的滑动通过Behavior反馈到其他子控件并执行一些动画
这里的滑动控件指的是RecyclerView
/NestedScrollView
/ViewPager
,意味着ListView
、ScrollView
不行
使用前需要添加support-design依赖
1 | implementation 'com.android.support:design:25.4.0' |
布局
1 |
|
适配器
1 | public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { |
Behavior
1 | public class FABBehavior extends FloatingActionButton.Behavior { |
调用
1 | public class MainActivity extends AppCompatActivity { |
效果如下,实现了FloatingActionButton上划隐藏,下拉显示
AppBarLayout
AppBarLayout继承自LinearLayout,一般用于导航栏,其常见子控件为Toolbar,但同时又不局限于Toolbar,可以实现导航栏的多种综合效果,其作为容器,里面可以增加布局,按照需要去实现各种效果
这里做一个简单的演示,导航栏通过recyclerview的滑动而显隐的效果
首先依旧是要引入依赖
1 | implementation 'com.android.support:design:25.4.0' |
然后编写布局,其外层为CoordinatorLayout,这里使用了预设behavior:appbar_scrolling_view_behavior
,在监听的控件加上Flag设置,例如这里的app:layout_scrollFlags="scroll|enterAlways""
其Flag参数包括
scroll:将此布局和滚动时间关联。这个标识要设置在其他标识之前,没有这个标识则布局不会滚动且其他标识设置无效
enterAlways:任何向下滚动操作都会使此布局可见。这个标识通常被称为快速返回模式
enterAlwaysCollapsed:假设你定义了一个最小高度(minHeight)同时enterAlways也定义了,那么view将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,当滚动到顶部的时候展开完
exitUntilCollapsed:当你定义了一个minHeight,此布局将在滚动到达这个最小高度的时候折叠
snap:当一个滚动事件结束,如果视图是部分可见的,那么它将被滚动到收缩或展开。例如,如果视图只有底部25%显示,它将折叠。相反,如果它的底部75%可见,那么它将完全展开
snap:
1 |
|
由于使用的是RecyclerView,故还需要适配器
1 | public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { |
设置RecyclerView数据
1 | public class MainActivity extends AppCompatActivity { |
ViewPager + TabLayout + Fragment + AppBarLayout
AppBarLayout同时还可以使用其他可滑动控件,例如NestedScrollView,其常用组合为:ViewPager + TabLayout + Fragment + AppBarLayout
由于这套组合的体验效果不错,这里展现一下这个样式的demo
首先依旧是引入依赖
1 |
因为使用了Toolbar,所以这里使用NoActionBar的主题
1 | <resources> |
编写ViewPager的Fragment布局,这里简单显示text,记得这里应该是一个滑动控件
1 |
|
然后是自定义的fragment
1 | public class DefaultFragment extends Fragment { |
接下来是主布局
1 |
|
最后关联TableLayout和ViewPager
1 | public class MainActivity extends AppCompatActivity { |
CollapsingToolbarLayout
这个控件可以实现Toolbar的折叠效果
先看下其常用参数expandedTitleMargin
:展开后的边距statusBarScrim
:状态栏颜色contentScrim
:内容颜色app:layout_collapseMode
:设置折叠模式,分为视差模式(parallax:在折叠的时候会有折叠视差效果,一般搭配layout_collapseParallaxMultiplier,视差的明显程度),固定模式(pin:在折叠的时候最后固定在顶端,再和toolbar一起推出),无模式(none:折叠时toolbar直接推出)expandedTitleGravity
:展开的位置collapsedTitleGravity
:折叠的位置
使用时依然需要导入依赖
1 | implementation 'com.android.support:design:25.4.0' |
然后使用NoActionBar主题
使用时的布局示例
1 |
|
设置Toolbar
1 | public class MainActivity extends AppCompatActivity { |