Android Support Design Library之TextInputLayout(二)

简介: Android Support Design Library之TextInputLayout(二)

3.TextInputLayout验证输入合法性


对于这类需求想必随处可以,比如要你输入电话号码,你去随便输入一通,肯定会提示你格式不正确,那么TextInputLayout自带显示错误信息功能,不需要你设置额外的控件来提示用户,你会用到TextInputLayout中的setError与setErrorEnabled,前者是提示用户输入错误的信息,后则是当你输入错误后又输入正确,那么其会隐藏刚才的错误信息。


下面我们写按钮的点击事件的监听方法:

this.okBut.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        hideKeyboard();
        String username = usernameTil.getEditText().getText().toString();//获取用户名输入框字符串
        String password = passwordTil.getEditText().getText().toString();//获取密码输入框字符串
        if (!validateEmail(username)) {
            //如果错误显示错误信息
            usernameTil.setError(getResources().getString(R.string.login_username_validate_error_string));
            return;
        } else {
            //否则隐藏上次错误
            usernameTil.setErrorEnabled(false);
        }
        if (!validatePassword(password)) {
            //设置密码错误信息
            passwordTil.setError(getResources().getString(R.string.login_password_validate_error_string));
            return;
        } else {
            //否则隐藏上次错误
            passwordTil.setErrorEnabled(false);
        }
        Snackbar.make(MainActivity.this.findViewById(R.id.lyj_layout), "登录成功", Snackbar.LENGTH_SHORT).show();
    }
});


当你点击按钮的时候,你会判断你的密码和用户名是否输入正确,如果不正确会得到如图所示的提示:

51.png


主要的代码都在上面,不过这里还有一个几个附带功能代码有必要介绍一下:


①点击按钮关闭输入键盘


每个应用的登录界面在点击登录按钮后输入键盘都会被关闭,如果你不关闭,会降低用户的体验的,那么关闭输入键盘的代码如下:

private void hideKeyboard() {
    View view = getCurrentFocus();
    if (view != null) {
        ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).
                hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

②验证输入的是否为邮箱

private static final String EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$";
private Pattern pattern = Pattern.compile(EMAIL_PATTERN);
private Matcher matcher;
/***
 * 验证输入格式是否为邮箱
 * @param email
 * @return
 */
public boolean validateEmail(String email) {
    matcher = pattern.matcher(email);
    return matcher.matches();
}


至于那一串正则表达式有兴趣可以了解,没兴趣没关系,匹配字符串永远就那么几个比如电话,密码,邮箱,姓名等,百度上经典的完整的正则表达式一大堆,比你写的好的人多了。基本了解符号意思就够了,用的时候复制粘贴。


③密码验证


这里简单设置了大于5位:


public boolean validatePassword(String password) {
    return password.length() > 5;
}


本篇博文源码下载地址:


http://download.csdn.net/detail/liyuanjinglyj/9388101


4.分析Snackbar使用代码


记得前面用到一句话snackbar,那么这里还是一起介绍了吧。专门用一篇博文讲解这个类似于Toast的Snackbar有点大材小用的意思,不过你真的完全了解Snackbar怎么使用吗?下面我们将一一介绍其使用方式。

this.fabOne.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        snackbar.dismiss();
    }
});
this.fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        snackbar = Snackbar.make(coordinatorLayout, "我是Snackbar", Snackbar.LENGTH_SHORT)
                .setAction("你好", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        PopupMenu popupMenu = new PopupMenu(MainActivity.this, fab);
                        popupMenu.getMenuInflater().inflate(R.menu.menu_main, popupMenu.getMenu());
                        popupMenu.show();
                    }
                });
        snackbar.setDuration(4000);
        snackbar.setActionTextColor(ColorStateList.valueOf(Color.RED));
        snackbar.getView().setBackgroundColor(Color.BLUE);
        snackbar.setCallback(new Snackbar.Callback() {
            @Override
            public void onShown(Snackbar snackbar) {
                super.onShown(snackbar);
                Log.i("liyuanjinglyj", "我显示了你知道吗?");
            }
            @Override
            public void onDismissed(Snackbar snackbar, int event) {
                super.onDismissed(snackbar, event);
                Log.i("liyuanjinglyj", "我关闭了你知道吗?");
            }
        });
        snackbar.show();
    }
});


上面的代码基本囊括了Snackbar的所有方法。下面我们将一一介绍其使用。



①其构造方法有两个如下:


make(View view, int resId, int duration)
Make a Snackbar to display a message.
make(View view, CharSequence text, int duration)
Make a Snackbar to display a message
Snackbar will try and find a parent view to hold Snackbar's view from the value given to view.

唯一的区别在于第二个参数,一个引用资源ID字符串,一个直接使用字符串。


②setAction:其有也有两个方法与构造方法一样,引用字符串与直接使用字符串的区别。


效果如下:


52.png


显示的字符串在黑色圈圈里,并且点击后会调用回调函数,与点击Button效果一样。


③setDuration:设置其显示的时间,单位毫秒,这里为4毫秒。


④setActionTextColor:就是setAction第一个字符串的颜色。


⑤getView().setBackgroundColor(Color.BLUE):设置其snackbar背景


⑥setCallback:设置回调函数,负责监听snackbar的显示与隐藏:显示调用onShown方法,隐藏调用onDismissed。效果如下:


53.png

⑦show():很显然为显示


⑧dismiss:当显示的snackbar还显示在界面没有关闭的时候,调用该方法,snackbar会立即关闭。


这段代码实现的效果就如下:


54.png


记住将snackbar构造方法的第一个参数设置为CoordinatorLayout容器,就不会遮盖FAB按钮。

相关文章
|
3月前
|
存储 Java 数据库
Android数据存储:什么是Room Persistence Library?
Android数据存储:什么是Room Persistence Library?
41 0
|
Android开发
IDEA编译gradle提示This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project, please retry with version 2020.3.1 or newer.
IDEA编译gradle提示This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project, please retry with version 2020.3.1 or newer.
642 1
|
11月前
|
XML Java 开发工具
Android5.0新特性-Material Design
Android5.0新特性-Material Design
60 0
|
11月前
|
Android开发 开发者 UED
Android Design Support Library初探-更新中
Android Design Support Library初探-更新中
72 0
|
Android开发
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
199 0
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
|
开发工具 Android开发
Android Support Design Library之FloatingActionButton(二)
Android Support Design Library之FloatingActionButton(二)
58 0
Android Support Design Library之FloatingActionButton(二)
|
Android开发
Android Support Design Library之FloatingActionButton(一)
Android Support Design Library之FloatingActionButton(一)
61 0
Android Support Design Library之FloatingActionButton(一)
|
Android开发
Android Support库——support annotations
  Android Support库是官方出的支持扩展库,包含了丰富的组件、工具类等,通过在Android SDK Manager中勾选以下两项来获取到。   其中,Android Support Library下载的是对应的源码或jar包,在使用Eclipse时会从这里拷贝出需要的文件到项目中。
943 0
|
19天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
94 0