文本输入布局TextInputLayout

TextInputLayout是MaterialDesign库中对编辑框EditText进行增强的一个控件。众所周知,EditText未输入字符时,我们可以给它显示默认的提示文字hint;可是一旦输入字符,这个hint提示就消失了,虽然没有提示也没有什么大碍,但有总比没有好呀。TextInputLayout便是用来解决提示文字的显示问题,它默认把提示文字显示在编辑框的上方,这样在编辑框内输入文字,就不影响上方的提示文字了。

代码中使用TextInputLayout要进行以下改造:
1、添加几个库的支持,包括design库(TextInputLayout需要)、appcompat-v7库(AppCompatActivity);
2、编辑框所在页面的Activity需要继承自AppCompatActivity,否则运行时打开页面会报错;
3、布局文件中在TextInputLayout节点下面加入EditText控件,必须并且只能加入一个EditText;

下面是TextInputLayout新增的方法说明:
setHint : 设置提示文字的内容。
setHintEnabled : 设置提示文字是否可用。
setHintTextAppearance : 设置提示文字的风格。
setHintAnimationEnabled : 设置提示文字的展示动画是否可用。
setError : 设置错误文字的内容。
setErrorEnabled : 设置错误文字是否可用。
setCounterEnabled : 设置文字计数器是否可用。
setCounterMaxLength : 设置文字计数器的最大长度。

从以上方法可以看到,TextInputLayout增加的界面元素主要是三个,分别是位于编辑框左上角的提示文字、位于编辑框左下角的错误文字、位于编辑框右下角的文字计数器。具体的文本输入布局效果如见下:

倘若在代码中调用setCounterMaxLength方法设置了文字计数器的最大长度,那么运行时当输入字符数超过计数最大值,应用会异常退出,日志报错“Failed to resolve attribute at index 3”。这个好坑,既然出现问题,就想办法解决它,解决办法如下所示(以下方案任选其一):
1、在布局文件中给EditText控件设置maxLength属性,指定允许输入字符串的最大长度。
2、页面主题使用Theme.Design.*系列风格,比如Theme.Design.Light。但该方法不会限制输入的字符个数。
3、页面主题是Theme.AppCompat.*的情况,如果为亮色风格Light,则在该主题下添加一行“<item name="textColorError">@color/design_textinput_error_color_light</item>”;如果为暗色风格Dark,则在该主题下添加一行“<item name="textColorError">@color/design_textinput_error_color_dark</item>”。该方法同样也不会限制输入的字符个数。

下面是使用TextInputLayout的布局文件例子:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp" ><android.support.design.widget.TextInputLayoutandroid:id="@+id/til_user"android:layout_width="match_parent"android:layout_height="wrap_content" ><EditTextandroid:id="@+id/et_user"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入用户名"android:inputType="text"android:textColor="#555555"android:textColorHint="#aaaaaa"android:textSize="17sp" /></android.support.design.widget.TextInputLayout></LinearLayout>

文本输入编辑框TextInputEditText

TextInputEditText是Android6.0后新加的编辑框控件,它的用法跟EditText没什么区别,之所以鼓捣这么一个新控件,是为了解决一个小小的问题。不知大家有没有发现,往编辑框输入文字,手机在竖屏与横屏两种情况下的页面展示是不一样的。竖屏时输入文字,会在当前页面下方弹出输入法面板;而横屏时输入文字,系统会打开一个新页面,新页面的上半部分是编辑框,下半部分是输入法面板。

如果不用TextInputLayout,只使用EditText的话,横屏时的编辑框也会显示提示文字;可是一旦加了TextInputLayout,再看横屏的编辑框,发现编辑框内的提示文字不见了,这是因为TextInputLayout强行把提示文字从编辑框内挪到了编辑框上方,可这种做法没考虑到横屏时候的情况,所以造成横屏反而不显示提示文字的结果。下面是使用TextInputLayout+EditText的横屏输入页面,可以看到此时编辑框内没有提示文字。

那么TextInputEditText就是为了让横屏时也要显示提示文字,具体做法是把布局文件中的EditText名称换成“android.support.design.widget.TextInputEditText”,其他代码不再做任何修改。接着运行应用看看发生了什么?最终的页面效果,便是横屏时能够在编辑框内显示提示文字了,具体页面截图如下所示:

所以呢,TextInputEditText与EditText的唯一区别就是,横屏时输入文字,是否会在编辑框内显示提示文字。

点击下载本文用到的文本输入布局的工程代码

点此查看Android开发笔记的完整目录

Android开发笔记(一百三十八)文本输入布局TextInputLayout相关推荐

  1. Android开发笔记(三十八)列表类视图

    AdapterView AdapterView顾名思义是适配器视图,Spinner.ListView和GridView都间接继承自AdapterView,这三个视图都存在多个元素并排展示的情况,所以需 ...

  2. Android开发笔记(三十五)页面布局视图

    布局视图的类别 布局视图有五类,分别是线性布局LinearLayout.相对布局RelativeLayout.框架布局FrameLayout.绝对布局AbsoluteLayout.表格布局TableL ...

  3. Android开发笔记(六十八)工程库打包

    写好一个Android模块,比如说一个自定义控件或某个功能的sdk,然后开放出来给别人使用,就得通过某种方式把源码提供给对方.常见的打包方式有: 一.直接给源码,由开发者把代码加入到自己的工程中 该方 ...

  4. Android开发笔记(五十八)铃声与震动

    拖动条SeekBar SeekBar继承自进度条ProcessBar,有关ProcessBar的介绍见<Android开发笔记(四十九)异步任务处理AsyncTask>.SeekBar与P ...

  5. Android开发笔记(三十六)展示类控件

    View/ViewGroup View是单个视图,所有的控件类都是从它派生出来:而ViewGroup是个视图组织,所有的布局视图类都是从它派生出来.由于View和ViewGroup是基类,因此很少会直 ...

  6. Android开发笔记(四十八)Thread类实现多线程

    Thread概述 Thread类是真正的线程,查看源码可见Thread也实现了Runnable接口,但它内部有创建新的工作线程,所以Thread对象运行在与主线程不一样的分线程上. 因为Thread对 ...

  7. Android开发笔记(七十八)异常容错处理

    Exception Java的异常分两类,运行时异常RuntimeException和非运行时异常. 运行时异常包括空指针异常NullPointerException.数组越界异常IndexOutOf ...

  8. Android开发笔记(三十九)Activity的生命周期

    与生命周期有关的方法 下面是Activity类与生命周期有关的方法: onCreate : 创建页面 onStart : 开始页面 onStop : 停止页面 onResume : 恢复页面 onPa ...

  9. Android开发笔记(三十四)Excel文件的读写

    Android中操作Excel文件的场合较少见,主要是一些专业领域导入导出报表时使用,所以处理Excel读写的开源代码也很稀缺.目前读写Excel主要采用开源库jxl,这个是韩国人写的excel操作工 ...

  10. Android开发笔记(三十二)文件基础操作

    File类 File类是java中的文件操作工具类,它的常用方法如下: File构造函数 : 根据文件路径构造File对象 delete : 删除文件 exists : 判断文件是否存在 getNam ...

最新文章

  1. cxGrid使用汇总4
  2. spyder ipython控制台_Spyder Ipython控制台完全忽略打印语句
  3. 解决Eclipse中文乱码
  4. Elasticsearch的PHP的API使用(一)
  5. linux文件夹权限问题
  6. 计算机网络在实践中的应用,计算机网络技术及在实践中的应用
  7. sql 关联使用id还是code_R语言实例:用glue批量生成SQL语句
  8. 地面控制点的定义与作用_什么是地面塌陷
  9. 人间故事馆话题:聊聊那些被骗经历,让其他人不再被骗
  10. linux scp 隐藏文件,scp 客户端发现了隐藏 35 年的漏洞
  11. 清华大学-操作系统实验-Lab1
  12. arcgis10之将多个shp文件合并成一个shp文件
  13. itext 生成 PDF(一)
  14. 重新定义QLabel的clicked事件
  15. epcs1s是epcs1系列的么_串行FLASH配置芯片(EPCS1或EPCS4)数据手册
  16. PS常用快捷键 初学者必看
  17. java读取图片文字
  18. html新年礼物,特别的新年礼物 特殊的新年礼物
  19. /deep/ >>> ::v-deep的用法
  20. Windows 10 运行python弹出windows应用商店

热门文章

  1. php整么去掉时间的年月日,php强大的时间转换函数strtotime
  2. java 音频 api_Java中的接口
  3. 若依前端table中如何显示图片?
  4. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
  5. JAVA水晶花数_我的世界Java版1.17快照20w45a新增物品详解
  6. Soul 网关源码阅读(三)请求处理概览
  7. layui table动态选中_微信炫酷炸啦!超视觉动态壁纸来了,还自带音效!
  8. java double的加法_java Double 进行加减乘除
  9. java 度量_Java度量方法调用率
  10. poj3233(矩阵快速幂的和)