Android开发笔记(一百三十八)文本输入布局TextInputLayout
文本输入布局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相关推荐
- Android开发笔记(三十八)列表类视图
AdapterView AdapterView顾名思义是适配器视图,Spinner.ListView和GridView都间接继承自AdapterView,这三个视图都存在多个元素并排展示的情况,所以需 ...
- Android开发笔记(三十五)页面布局视图
布局视图的类别 布局视图有五类,分别是线性布局LinearLayout.相对布局RelativeLayout.框架布局FrameLayout.绝对布局AbsoluteLayout.表格布局TableL ...
- Android开发笔记(六十八)工程库打包
写好一个Android模块,比如说一个自定义控件或某个功能的sdk,然后开放出来给别人使用,就得通过某种方式把源码提供给对方.常见的打包方式有: 一.直接给源码,由开发者把代码加入到自己的工程中 该方 ...
- Android开发笔记(五十八)铃声与震动
拖动条SeekBar SeekBar继承自进度条ProcessBar,有关ProcessBar的介绍见<Android开发笔记(四十九)异步任务处理AsyncTask>.SeekBar与P ...
- Android开发笔记(三十六)展示类控件
View/ViewGroup View是单个视图,所有的控件类都是从它派生出来:而ViewGroup是个视图组织,所有的布局视图类都是从它派生出来.由于View和ViewGroup是基类,因此很少会直 ...
- Android开发笔记(四十八)Thread类实现多线程
Thread概述 Thread类是真正的线程,查看源码可见Thread也实现了Runnable接口,但它内部有创建新的工作线程,所以Thread对象运行在与主线程不一样的分线程上. 因为Thread对 ...
- Android开发笔记(七十八)异常容错处理
Exception Java的异常分两类,运行时异常RuntimeException和非运行时异常. 运行时异常包括空指针异常NullPointerException.数组越界异常IndexOutOf ...
- Android开发笔记(三十九)Activity的生命周期
与生命周期有关的方法 下面是Activity类与生命周期有关的方法: onCreate : 创建页面 onStart : 开始页面 onStop : 停止页面 onResume : 恢复页面 onPa ...
- Android开发笔记(三十四)Excel文件的读写
Android中操作Excel文件的场合较少见,主要是一些专业领域导入导出报表时使用,所以处理Excel读写的开源代码也很稀缺.目前读写Excel主要采用开源库jxl,这个是韩国人写的excel操作工 ...
- Android开发笔记(三十二)文件基础操作
File类 File类是java中的文件操作工具类,它的常用方法如下: File构造函数 : 根据文件路径构造File对象 delete : 删除文件 exists : 判断文件是否存在 getNam ...
最新文章
- cxGrid使用汇总4
- spyder ipython控制台_Spyder Ipython控制台完全忽略打印语句
- 解决Eclipse中文乱码
- Elasticsearch的PHP的API使用(一)
- linux文件夹权限问题
- 计算机网络在实践中的应用,计算机网络技术及在实践中的应用
- sql 关联使用id还是code_R语言实例:用glue批量生成SQL语句
- 地面控制点的定义与作用_什么是地面塌陷
- 人间故事馆话题:聊聊那些被骗经历,让其他人不再被骗
- linux scp 隐藏文件,scp 客户端发现了隐藏 35 年的漏洞
- 清华大学-操作系统实验-Lab1
- arcgis10之将多个shp文件合并成一个shp文件
- itext 生成 PDF(一)
- 重新定义QLabel的clicked事件
- epcs1s是epcs1系列的么_串行FLASH配置芯片(EPCS1或EPCS4)数据手册
- PS常用快捷键 初学者必看
- java读取图片文字
- html新年礼物,特别的新年礼物 特殊的新年礼物
- /deep/ >>> ::v-deep的用法
- Windows 10 运行python弹出windows应用商店
热门文章
- php整么去掉时间的年月日,php强大的时间转换函数strtotime
- java 音频 api_Java中的接口
- 若依前端table中如何显示图片?
- [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
- JAVA水晶花数_我的世界Java版1.17快照20w45a新增物品详解
- Soul 网关源码阅读(三)请求处理概览
- layui table动态选中_微信炫酷炸啦!超视觉动态壁纸来了,还自带音效!
- java double的加法_java Double 进行加减乘除
- java 度量_Java度量方法调用率
- poj3233(矩阵快速幂的和)