Android Design 新控件

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

design包里面的控件.png

1、TextInputLayout###

Paste_Image.png

前后对比.gif

问题说明:

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

2、FloatingActionButton###

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

3、NavigationView###

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

  • 主要内容视图必须是DrawerLayout的第一个子view。
  • 主要内容视图的width和height两个属性的值必须是match。
  • 抽屉视图必须设置属性android:layout_gravity的属性值。
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- Content -->
        <FrameLayout
            android:id="@+id/content_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

        <!-- Drawer -->
        <android.support.design.widget.NavigationView
            android:id="@+id/navigation"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:menu="@menu/navigation_menu"
            app:headerLayout="@layout/header_layout"/>
    </android.support.v4.widget.DrawerLayout>
  • 抽屉视图必须使用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,如果你这样写

        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <android.support.v4.view.ViewPager
                android:id="@+id/vp_coo"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

            </android.support.v4.view.ViewPager>
        </android.support.v4.widget.NestedScrollView>

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

到此,总结如下:##


  • **单页面。如果不用滑动列表类的控件,直接放在NestedScrollView下;如果用滑动列表类的控件,直接用RecyclerView **
       <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@string/app_name"/>

        </android.support.v4.widget.NestedScrollView>
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview_coo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

        </android.support.v7.widget.RecyclerView>
  • 多页面。这就必须要用到ViewPager了 ,如果ViewPager下的布局无滑动列表效果,根布局用NestedScrollView,如果有滑动列表效果,用 RecyclerView
        <android.support.v4.view.ViewPager
            android:id="@+id/vp_coo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
        </android.support.v4.view.ViewPager>

技术鸟的简书

一个Activity掌握Design新控件

FloatingActionButton、TextInputLayout、TextInputEditText简单用法

CoordinatorLayout、AppBarLayout简单用法

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容