Android Design 新控件

文章后面收录了学习中参考过的相关文章,此处只对遇到的问题做必要的记录###

Android Design 新控件_第1张图片
design包里面的控件.png

1、TextInputLayout###

Android Design 新控件_第2张图片
Paste_Image.png

Android Design 新控件_第3张图片
前后对比.gif

问题说明:

  • 左右两次运行程序代码唯一不同的地方是有没有* mTextInputLayout.setError(null) *这一句,
  • 没有这一句的时候运行效果如左侧展示,加上这一句运行效果如右侧展示,
  • 看代码,就是点击button检测EditText里面的内容是否包含0,包含0,提示错误,不包含0,不提示错误,左侧第一次输入10,提示错误了,删掉0再加上0,不提示错误,但是提示错误语句所占的空间还是占用了,只能看到下方的EditText下移了而已——百思不得其姐,Google了好久没找到原因和解决办法,看源码也没看出个所以然,最后试着加上* mTextInputLayout.setError(null) *这一句,问题解决!!!

2、FloatingActionButton###

  • 不在代码中设置点击事件,单纯地在布局里放一个该控件,点击的时候是没有点击效果的,不像button,放上去就有点击效果。
  • 官方的就基本用了一下,代码中若要用到,还是用这个第三方的吧——makovkastar/ FloatingActionButton
Android Design 新控件_第4张图片
demo.gif

3、NavigationView###

Android Design Support Library初探,NavigationView实践
DrawerLayout几个很重要的布局特点:

  • 主要内容视图必须是DrawerLayout的第一个子view。
  • 主要内容视图的width和height两个属性的值必须是match。
  • 抽屉视图必须设置属性android:layout_gravity的属性值。
    

        
        

        
        
    
  • 抽屉视图必须使用dp方式指定width的值和height的值是match。

加上这一句,才会在toolbar上显示打开关闭drawer的按钮mActionBarDrawerToggle.syncState();###

*Synchronize the state of the drawer indicator/affordance with the linked DrawerLayout. *


4、CoordinatorLayout###

以下是对技术鸟文章的理解,需要先看相关链接的技术鸟的原文

——
3、一个特殊的滑动型控件并设置layout_behavior属性,这里用的是ViewPager。注意,layout_behavior的属性值用的是系统定义好的固定字符串@string/appbar_scrolling_view_behavior,大家感兴趣的自己去翻阅源码看看,后续介绍behavior时,我再仔细讲解。

对于第三点,这里拿出来单独强调一下,有没有发现滑动型控件前我用了“特殊”两个字来修饰!CoordinatorLayout之所以能够协调Children View之间的交互行为,主要就是依赖于NestedScrolling这个东西,这里涉及到两个接口类NestedScrollingParent和NestedScrollingChild。CoordinatorLayout实现了前者,而CoordinatorLayout的Children核心之一,滑动型控件,实现了后者,所以才能够做出这个交互行为。
——
文/亦枫(作者)
原文链接:http://www.jianshu.com/p/4b0f3c80ebc9#
著作权归作者所有,转载请联系作者获得授权,并标注“作者”。

看到这段话我就困惑了,ViewPager也没有实现NestedScrollingChild接口啊?于是我开始尝试……###

  • 是不是ViewPager中放的child view实现了这个接口就可以?####

1、如果使用的adapter继承的是FragmentPagerAdapter,那么Fragment绑定的布局根view是RecyclerView的话,且必须设置adapter,可以实现所需的效果。
2、如果使用的adapter继承的是PagerAdapter,那么ViewPager每页所放布局根view是RecyclerView的话(RecyclerView不设置adapter都可以),可以实现所需的效果。
但是,都用RecyclerView了,岂有不设置setAdapter的道理,除非像我这样搞实验懒得写,所以综上,ViewPager子布局是RecyclerView,可以实现所需的效果。
3、如果不符合第1、2条,聪明如你我肯定想到了ViewCompat.setNestedScrollingEnabled(mViewPager,true);但是没有用,也实现不了相应的效果。

  • 其实有一个类我发现很关键——android.support.v4.widget.NestedScrollView####

/**
 * NestedScrollView is just like {@link android.widget.ScrollView}, but it supports acting
 * as both a nested scrolling parent and child on both new and old versions of Android.
 * Nested scrolling is enabled by default.
 */
public class NestedScrollView extends FrameLayout implements NestedScrollingParent,
        NestedScrollingChild, ScrollingView {

总得来说,NestedScrollView这个类实现了三个接口,并且继承了FrameLayout,但是 NestedScrollView is just like android.widget.ScrollView ——注意了、注意了、注意了——它很像 ScrollView,如果你这样写

        

            

            
        

**就会出现类似ScrollView嵌套ViewPager,ViewPager不显示的问题 **

到此,总结如下:##


  • **单页面。如果不用滑动列表类的控件,直接放在NestedScrollView下;如果用滑动列表类的控件,直接用RecyclerView **
       

            

        
        

        
  • 多页面。这就必须要用到ViewPager了 ,如果ViewPager下的布局无滑动列表效果,根布局用NestedScrollView,如果有滑动列表效果,用 RecyclerView
        
        

技术鸟的

一个Activity掌握Design新控件

FloatingActionButton、TextInputLayout、TextInputEditText简单用法

CoordinatorLayout、AppBarLayout简单用法

codepath教程:浮动操作按钮详解

你可能感兴趣的:(Android Design 新控件)