版权声明:android
本帐号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影全部。app
未经容许,不得转载。函数
Design Support Library 是 Google 发布的一个全新的兼容函数库,它能够在 Android 2.1 (Api level 7)及以上的设备中,实现 Material Design 的效果,这个函数库同时也提供了一系列控件。今天介绍的 TextInputLayout(如下简称 TIL) 就是其中之一。布局
在使用 Design Support Library 以前,须要在 build.gradle 文件中,添加依赖,这里使用的是 25.3.0。学习
compile 'com.android.support:design:25.3.0'
gradle
TIL 继承自 LinearLayout ,能够用它实现 Material Design 效果的一个表单输入框。动画
相似以下效果:ui
从实现的功能能够看到,它在本来的 EditText 的基础之上,添加了一些表单录入必要的功能:设计
TIL 其实就是咱们对表单录入的一个基本要求,例如实现一个简单的登陆页面,彻底是能够知足咱们的需求的,而且它还属于 Material Design 的效果规范。3d
这些效果,咱们只须要使用 TIL 的属性和方法,便可完成这些功能,而在以前咱们都须要开发者对其单独开发。
TIL 从名字上看也能猜到,它是一个 Layout ,而且是继承自 LinearLayout ,可是它只能容纳一个 EditText,而实际上从它设计的角度来看,也不推荐再在其内包含其它的 View 了,由于这样会破坏 TIL 本来的设计。
在使用过程当中,是能够不用为 TIL 中的 EditText 单独设定 id 进行操做的,大部分操做都是能够经过 TIL 自身的 API 进行操做的,若是是在须要操做 EditText 对象,TIL 也提供了对应的 getEditText() 方法,来获取其内的 EditView 对象。
这样就完成了 TIL 最基本的功能,接下来让咱们把 TIL 的特性拆分出来,来看看实现个别功能须要使用到的属性。
TIL 中,能够经过使用 hint 对输入的内容进行提示,当其内部的 EditText 获取到焦点的时候,将 hint 的内容上移。
在 TIL 中,使用 hint 效果,相关的属性和方法:
最简单的用法,就是只使用 android:hint 属性设置一次 hint 便可,可是也须要了解一下如何修改它的其余属性。
TIL 中,错误通常都是在逻辑代码里,经过对输入数据的校验,来进行提示,可是同时也可使用属性设置错误提示的样式。
在 TIL 中,使用错误提示的相关属性和方法:
TIL 在内部 EditText 的 android:inputType 为 xxxPassword 的时候,能够在 TIL 配置一个图标按钮,用于开启和关闭是否显示密码内容。
使用密码开关功能,使用到的相关属性和方法:
通常来讲,咱们使用默认的眼睛样式的图标便可。若是必定须要修改,能够参见 Widget.Design.TextInputLayout
中的设定进行修改。
TIL 也能够设定当前输入的字符长度,以及限定的字符长度。
相关属性和方法:
能够单独使用 counterEnabled ,也能够配合 counterMaxLength 使用。
TIL 对输入支付长度的限制提示,若是超过 counterMaxLength 的限制,只是会变色提示,可是并不会让阻止用户继续输入。
默认的样式其实已经够咱们使用了,除了使用对应属性的 xxxTextAppearance 对其最终使用的 TextView 进行设定样式外。还能够在style 中,统一设定,具体每一个属性的格式,能够参考Widget.Design.TextInputLayout
中的设定。
以前就说过,虽然 MD 的设计很酷炫,可是实际上,咱们在学习它的使用过程当中,有一些它设计上的优势,值得咱们学习,这才是精髓部分。
看看上面介绍的 TIL 的一些特性的设置来看看他们具体是如何实现的。
首先先让咱们看看最终显示出来的布局结构。
能够看到,虽然在咱们设定的布局中,看着 EditText 是 TextInputLayot 的直接子 View ,可是从源码上看,在 TIL 中,会使用一个 FrameLayout 类型的 mInputFrame,将其添加到 TIL 中。
而真正遇到 EditText 的时候,却将其拦截下来,再添加到这个 mInputFrame 布局中。
那么接下来看看 hint 属性的效果是如何实现的。
从布局结构上看,hint 的文字,是直接 draw 到 TIL 上的,因此它并非和其余效果同样是用 TextView 堆起来的。
继续源码中找蛛丝马迹。
能够看到,若是 hint 须要被显示,将会把具体的实现,托管给 mCollapsingTextHelper 来处理 hint 效果的逻辑,这里就不继续跟下去了,有兴趣的能够找出来看看。
从上面布局结构能够看到,除了 mInputFrame 以外,还有一个 LinearLayout 的布局,它用于承载 mErrorView(错误提示) 和 mCounterView(输入计数)。
这个 LinearLayout 就是 mIndicatorArea。当 mErrorView 被使用完以后,也有对应的代码逻辑将其从 mIndicatorArea 中移除掉。
到这里,TIL 的关键设计点就已经清楚了,它不像外部看到的布局那样,直接使用 EditText ,而是对其进行多个布局的包装,让不一样的功能单独拆分出来去实现。
到这里就结束了,以后再继续介绍 Support Design 里的其它控件。