android 迭代版本之 UI控件更新

android 5.0新增控件

CardView顾名思义是卡片视图,它继承FrameLayout。它是一个带圆角的背景和阴影FrameLayout。CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为容器使用。
CardView的使用非常简单:

 <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="60dp">
        <Button
            android:id="@+id/ripple_button"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:layout_margin="5dp"
            android:background="@drawable/ripple"
            android:gravity="center"
            android:text="我在一个CardView里面" />
    </android.support.v7.widget.CardView>

Patelle(调色板)
Patelle是一个辅助类,它的作用是从图片中获取突出的颜色。
它可以提取下面几种特性的突出颜色:
- Vibrant(充满活力的)
- Vibrant Dark(充满活力,黑暗的)
- Vibrant Light(充满活力的,明亮的)
- Muted(柔和的)
- Muted Dark(柔和的,黑暗的)
- Muted Light(柔和的,明亮的)
        // 获取应用程序图标的Bitmap
        bitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        // 通过bitmap生成调色板palette
        Palette palette=Palette.from(bitmap).generate();
        // 获取palette充满活力色颜色
        int vibrantColor=palette.getVibrantColor(Color.WHITE); 

Toolbar(工具栏)
Toolbar顾名思义是工具栏,作为ActionBar的替代品出现,谷歌推荐使用Toolbar替代ActionBar。
Toolbar可以放置在任何地方,不像ActionBar一样只能放置在固定的位置。
Toolbar支持比ActionBar更集中的特征。
Toolbar可能包含以下可选元素的组合:
- 导航按钮
- 品牌的Logo图像
- 标题和子标题
- 一个或多个自定义视图

 this.toolbar = (Toolbar) findViewById(R.id.toolbar);
        // 设置Logo
        toolbar.setLogo(R.mipmap.ic_launcher);
        // 设置标题
        toolbar.setTitle("Android5.0");
        // 设置子标题
        toolbar.setSubtitle("新控件");
        //设置ActionBar,之后就可以获取ActionBar并进行操作,操作的结果就会反应在toolbar上面
        setActionBar(toolbar);
        //设置了返回箭头,,相当于设置了toolbar的导航按钮
        getActionBar().setDisplayHomeAsUpEnabled(true);

RippleDrawable(波纹图)
RippleDrawable顾名思义是波纹图,只能在Android5.0以上使用,目前还没有提供RippleDrawable向下兼容的支持包。
RippleDrawable可显示一个涟漪效应响应状态变化 。
定义一个UI的背景图片为RippleDrawable
Android:background="@drawable/ripple"
在drawable文件夹下面定义一个RippleDrawable的xml文件

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#0000FF">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />
            <corners android:radius="4dp" />
        </shape>
    </item>
</ripple>  

RecyclerView是ListView的替代品,谷歌推荐使用RecyclerView替代ListView。 
RecyclerView提供比ListView更加灵活的使用,并且性能比ListView更优。 
RecyclerView可以设置线性,网格,瀑布流式三种布局管理器。 
- LinearLayoutManager(线性布局管理器) 
- GridLayoutManager(网格布局管理器) 
- StaggeredGridLayoutManager(瀑布流式布局管理器)
android.support.design.widget.NavigationView

android.support.design.widget.TabLayout

android.support.design.widget.TextInputLayout

android.support.design.widget.FloatingActionButton 有一个简书博客写的很详细 android 5.0新增的控件总结


android6.0新增控件

NavigationView,CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout的使用

一,首先是CoordinatorLayout: CoordinatorLayout是一个超强的FrameLayout.CoordinatorLayout旨在用于两个基本用例:
1,作为顶级应用程序的装饰或镀布局.(作为顶层布局)
2,作为一个或多个子视图的特异性相互作用的容器.(调度协调子布局)
CoordinatorLayout使用新的思路通过协调调度子布局的形式实现触摸影响布局的形式产生动画效果.CoordinatorLayout通过设置子View的Behaviors来调度子View.系统(v7包)提供了AppBarLayout.Behavior,AppBarLayout.ScrollingViewBehavior,FloatingActionButton.Behavior,SwipDismissBehavior等.CoordinatorLayout是怎么协调子控件呢?大家可以看下这篇文章:https://segmentfault.com/a/1190000005024216?utm_source=Weibo&utm_medium=shareLink&utm_campaign=socialShare&from=singlemessage&isappinstalled=0其实说简单点:CoordinatorLayout主要用于协调内部的各个子控件进行交互,通过设置子控件的behavior来操控子控件的一些操作和动画。

二,然后是AppBarLayout: AppBarLayout继承自LinearLayout,布局方向为垂直方向.AppBarLayout是在LinearLayout上加了一些材料设计的概念,它可以让你定制当某个可滚动View的滚动手势发生变化时,其内部的子View实现何种动作.一般情况下我们会在AppBarLayout中包裹Toolbar或者TabLayout,当滑动是可以选择需要隐藏的部分。AppBarLayout中有一个内置的Behavior类,而Toolbar和TabLayout中没有,由此可以看出正是因为AppBarLayout中又Behavior类,才能与CoordinatorLayout产生交互(AppBarLayout必须是CoordinatorLayout的直接子View)。需要注意的是AppBarLayout的子控件需要设置app:layout_scrollFlags属性(或者通过setScrollFlags()方法)才能达到其滑动效果。layout_scrollFlags属性有以下几种:
1,scroll:设置该flag,该控件可以滑动到屏幕之外,若未设置则会固定在屏幕的顶部。
2,enterAlways:设置该flag,向下任意的滑动都会导致该控件(设置layout_scrollFlags=”enterAlways”属性的控件)变为可见,启用快速“返回模式”。
3,enterUntilCollapsed:向上滚动时收缩View,但可以固定Toolbar一直在上面。
4,enterAlwaysCollapsed:当你的View已经设置minHeight属性又使用此标志时,你的View只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
5,snap(v23.1):简单理解就是View有一种吸附效果,View不会存在局部显示的效果,要么全部滑动出屏幕,要么会在屏幕中显示,有点类似于ViewPager的左右滑动。

关于Lsyout_ScrollFlags属性的详细解释可以看这篇文章,解释的很详细。http://codecloud.net/17998.html

三,最后是CollapsingToolbarLayout: CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout_scrollFlags,它可以控制包含在CollapsingToolbarLayout中的控件(如:ImageView、Toolbar)在响应layout_behavior事件时作出相应的scrollFlags滚动事件(移除屏幕或固定在屏幕顶端)。CollapsingToolbarLayout可以通过app:contentScrim设置折叠时工具栏布局的颜色,通过app:statusBarScrim设置折叠时状态栏的颜色。默认contentScrim是colorPrimary的色值,statusBarScrim是colorPrimaryDark的色值。CollapsingToolbarLayout的子布局有3种折叠模式(Toolbar中设置的app:layout_collapseMode):
1,none:这个是默认属性,布局将正常显示,没有折叠的行为。
2,pin: CollapsingToolbarLayout折叠后,Toolbar布局将固定在顶部。
3,parallax: CollapsingToolbarLayout折叠时,此布局会有折叠视差效果。
当CollapsingToolbarLayout的子布局设置了parallax模式时,我们还可以通过app:layout_collapseParallaxMultiplier设置视差滚动因子,值为:0~1。

以上三种布局需要结合使用,并设置相应的属性才能达到很好的效果。

这里也应用了一篇写的不错的Android6.0-新控件(二)


android 7.0新控件

就说说新工具类:DiffUtil 【Android】详解7.0带来的新工具类:DiffUtil

DiffUtil是support-v7:24.2.0中的新工具类,它用来比较两个数据集,寻找出旧数据集-》新数据集的最小变化量。
说到数据集,相信大家知道它是和谁相关的了,就是我的最爱,RecyclerView。
就我使用的这几天来看,它最大的用处就是在RecyclerView刷新时,不再无脑mAdapter.notifyDataSetChanged()。
以前无脑mAdapter.notifyDataSetChanged()有两个缺点:
不会触发RecyclerView的动画(删除、新增、位移、change动画)
性能较低,毕竟是无脑的刷新了一遍整个RecyclerView , 极端情况下:新老数据集一模一样,效率是最低的。

猜你喜欢

转载自blog.csdn.net/ation_work/article/details/68928614
今日推荐