文章后面收录了学习中参考过的相关文章,此处只对遇到的问题做必要的记录###
1、TextInputLayout###
问题说明:
- 左右两次运行程序代码唯一不同的地方是有没有* mTextInputLayout.setError(null) *这一句,
- 没有这一句的时候运行效果如左侧展示,加上这一句运行效果如右侧展示,
- 看代码,就是点击button检测EditText里面的内容是否包含0,包含0,提示错误,不包含0,不提示错误,左侧第一次输入10,提示错误了,删掉0再加上0,不提示错误,但是提示错误语句所占的空间还是占用了,只能看到下方的EditText下移了而已——百思不得其姐,Google了好久没找到原因和解决办法,看源码也没看出个所以然,最后试着加上* mTextInputLayout.setError(null) *这一句,问题解决!!!
2、FloatingActionButton###
- 不在代码中设置点击事件,单纯地在布局里放一个该控件,点击的时候是没有点击效果的,不像button,放上去就有点击效果。
- 官方的就基本用了一下,代码中若要用到,还是用这个第三方的吧——makovkastar/ FloatingActionButton
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>
FloatingActionButton、TextInputLayout、TextInputEditText简单用法