前言

 一般登录注冊界面都须要EditText这个控件来让用户输入信息,同一时候我们通常会设置一个标签(使用TextView)和EditText的hint属性来提示用户输入的内容,而设计库中高级组件TextInputLayout则专门为EditText设计的。即通过使用TextInputLayout包裹EditText实现当用户開始输入时hint属性值将显示在EditText上面作为一个提示标签,这个过程还带有动画效果,这样就避免了用户输入时输入提示消失的情况,同一时候。还能够更好地向用户提示错误输入信息。

TextInputLayout的两个功能:

  1. 给EditText加入一个带有动画效果的提示标签(利用EditText的hint属性的值作为提示标签内容);
  2. 处理错误输入。将错误输入提示信息显示在EditText附近。便于提示用户更好地完毕输入。

1. 实现浮动标签提示效果

 TextInputLayout和FrameLayout一样都是一个ViewGroup,而TextInputLayout包裹的是EditText,而且会将EditText的android:hint属性值作为提示标签,所以。使用很easy,例如以下:

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_margin="20dp"
android:id="@+id/usernameWraper"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:hint="请输入用户名"
android:layout_height="wrap_content"/> </android.support.design.widget.TextInputLayout>

用TextInputLayout包裹EditText并给EditText设置了hint属性后。这个EditText就带有了浮动提示标签的效果了,为了更好地看到效果。丰富一下这个xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <RelativeLayout
android:layout_width="match_parent"
android:background="#ff9900"
android:layout_height="200dp"> <TextView
android:text="用户登录"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:textColor="#fff"
android:textSize="30sp"
android:layout_height="wrap_content"/>
</RelativeLayout> <android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_margin="20dp"
android:id="@+id/usernameWraper"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:hint="请输入用户名"
android:layout_height="wrap_content"/> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_margin="20dp"
android:id="@+id/passwordWraper"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:hint="请输入密码"
android:layout_height="wrap_content"/> </android.support.design.widget.TextInputLayout> <Button
android:layout_width="match_parent"
android:layout_margin="20dp"
android:text="登录"
android:id="@+id/btn_login"
android:layout_height="wrap_content"/>
</LinearLayout>

2. 显示错误输入信息

 TextInputLayout使得我们在验证输入数据是能够更加方便地显示错误输入提示,这样能够使得输入更加友好。

对于处理错误信息,TextInputLayout提供了两个方法:

  1. setError(String message):设置错误提示信息。这个信息将会显示在EditText附近。

  2. setErrorEnabled(boolean enabled):设置错误信息不能够用,也就是移除setError(String message)加入的错误提示信息。

代码样例:

package com.example.lt.meterialdesign;

import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button; public class LoginActivity extends AppCompatActivity implements View.OnClickListener { private TextInputLayout mUsernameWraper;
private TextInputLayout mPasswordWraper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mUsernameWraper = (TextInputLayout) findViewById(R.id.usernameWraper);
mPasswordWraper = (TextInputLayout) findViewById(R.id.passwordWraper); Button btn_login = (Button) findViewById(R.id.btn_login);
btn_login.setOnClickListener(this);
} @Override
public void onClick(View v) {
// TextInputLayout能够取得包裹的EditText
String username = mUsernameWraper.getEditText().getText().toString().trim();
String password = mPasswordWraper.getEditText().getText().toString().trim();
if(TextUtils.isEmpty(username)){
mUsernameWraper.setError("用户名不能为空");
return;
}else{
// 移除错误提示信息
mUsernameWraper.setErrorEnabled(false);
}
if(TextUtils.isEmpty(password)){
mPasswordWraper.setError("密码不能为空");
return;
}else{
// 移除错误提示信息
mPasswordWraper.setErrorEnabled(false);
}
}
}

这里仅仅是对username与password是否为空进行了推断。假设要指定格式能够结合正則表達式验证数据格式。对于EditText能够给它加入文本改变监听addTextChangedListener,当用户改变输入的文本后进行数据格式的验证。然后更加情况显示输入提示。

执行效果:

能够看到,当我们開始在EditText中输入信息的时候,EditText的hint属性值将会显示在EditText上面,而且带有一个动画效果,显示为一个浮动标签。而且,当输入的数据格式不正确时,还会显示错误提示在EditText以下。

Material Design (二),TextInputLayout的使用的更多相关文章

  1. Android(Lollipop/5.0) Material Design(二) 入门指南

    Material Design系列 Android(Lollipop/5.0)Material Design(一) 简介 Android(Lollipop/5.0)Material Design(二) ...

  2. Material Design之TextInputLayout使用示例

    Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个supp ...

  3. Material Design之TextInputLayout、Snackbar的使用

    这两个控件也是Google在2015 I/O大会上公布的Design Library包下的控件,使用比較简单,就放在一起讲了,但有的地方也是须要特别注意一下. TextInputLayout Text ...

  4. Material Design学习-----TextInputLayout

    TextInputLayout是为EditText提供了一种新的实现和交互方式.在传统的EditText中存在一个hint属性,是说在editext中没有内容时,默认的提示信息.当想edittext中 ...

  5. Android(Lollipop/5.0) Material Design(六) 使用图像

    Material Design列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design(二 ...

  6. 用户登录(Material Design + Data-Binding + MVP架构模式)实现

    转载请注明出处: http://www.cnblogs.com/cnwutianhao/p/6772759.html MVP架构模式 大家都不陌生,Google 也给出过相应的参考 Sample, 但 ...

  7. Android(Lollipop/5.0) Material Design(一) 简单介绍

    Material Design系列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design( ...

  8. Android(Lollipop/5.0) Material Design(四) 创建列表和卡片

    Material Design系列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design( ...

  9. Android Material Design控件使用(二)——FloatButton TextInputEditText TextInputLayout 按钮和输入框

    FloatingActionButton 1. 使用FloatingActionButton的情形 FAB代表一个App或一个页面中最主要的操作,如果一个App的每个页面都有FAB,则通常表示该App ...

随机推荐

  1. Educational Codeforces Round 42 (Rated for Div. 2) C

    C. Make a Square time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  2. elemetUi 组件--el-checkbox

    [需求]实现选择右边的

  3. 浅谈android Socket 通信及自建ServerSocket服务端常见问题

    摘  要:TCP/IP通信协议是可靠的面向连接的网络协议,它在通信两端各建立一个Socket,从而在两端形成网络虚拟链路,进而应用程序可通过可以通过虚拟链路进行通信.Java对于基于TCP协议的网络通 ...

  4. lca板子

    #include<cstdio> #include<cstring> #include<algorithm> #define LL long long using ...

  5. centos 安装squid http代理

    yum -y install squid service squid start service iptables stop

  6. Kubernetes控制节点安装配置

    #环境安装Centos 7 Linux release 7.3.1611网络: 互通配置主机名设置各个服务器的主机名hosts#查找kubernetes支持的docker版本Kubernetes v1 ...

  7. docker 解决:Get http:///var/run/docker.sock/v1.19/version: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?

    docker 安装之后,通过命令查看docker相关信息时,可能会出现错误:Get http:///var/run/docker.sock/v1.19/version: dial unix /var/ ...

  8. 【原创】DQS安装失败——系统重新引导是否处于挂起状态

    问题:         安装完SQL Server 2012后,准备安装DQS服务,但是总是提示:操作“检查系统重新引导是否处于挂起状态”已完成,但有错误,正在中止安装.非常无奈,因为都根据其要求重启 ...

  9. 正则表达式之Regex.Replace()用法

    正则表达式替换匹配到的字符串 string txt = "AAA12345678AAAA"; //匹配到的连续数字的前4位用*替换 string m =Regex.Replace( ...

  10. AC日记——Little Elephant and Shifts codeforces 221e

    E - Little Elephant and Shifts 思路: 一次函数线段树(疯狂debug): b不断循环左移,判断每次最小的|i-j|,a[i]=b[j]: 仔细观察发现,每个bi移动时, ...