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按钮。

相关文章
|
6月前
|
存储 Java 数据库
Android数据存储:什么是Room Persistence Library?
Android数据存储:什么是Room Persistence Library?
119 0
|
2月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
65 1
|
3月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
166 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
4月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
【7月更文挑战第28天】随着移动应用市场的发展,用户对界面设计的要求不断提高。Material Design是由Google推出的设计语言,强调真实感、统一性和创新性,通过模拟纸张和墨水的物理属性创造沉浸式体验。它注重色彩、排版、图标和布局的一致性,确保跨设备的统一视觉风格。Android Studio提供了丰富的Material Design组件库,如按钮、卡片等,易于使用且美观。
145 1
|
Android开发 开发者 UED
Android Design Support Library初探-更新中
Android Design Support Library初探-更新中
98 0
|
XML Java 开发工具
Android5.0新特性-Material Design
Android5.0新特性-Material Design
92 0
|
XML Android开发 数据格式
Android 5.0新控件——TextInputLayout
Android 5.0(M)新控件——TextInputLayout 介绍之前,先直观的看一下效果 TextInputLayout其实是一个容器,他继承自LinearLayout,该容器是作用于TextView的,TextInputLayout只能包裹一个子节点,类似于ScrollView。
1190 0
|
5天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
7天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。