我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在Android中使用TextInputLayout创建一个登陆页面

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在Android中使用TextInputLayout创建一个登陆页面

怎么在Android中使用TextInputLayout创建一个登陆页面?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1. 实现 TextInputLayout

第一步: 创建一个新的项目

在Android Studio中 选择New > New project 。填入所需的信息然后创建项目。我的例子的target api是17,这是Design Support Library支持的最小api版本。这个级别的api基本上已经支持绝大多数设备了。我把主activity命名为LoginActivity,它的布局文件命名为activity_login.xml。

创建完项目之后,在主activity中把Android Studio自动产生的onCreateOptionsMenu 和onOptionsItemSelected方法删掉。我们要创建的登陆界面不需要菜单所以删掉这些方法是ok的。记得也删掉res/menu目录中的XML 菜单文件。

第二步:导入Support Library

要使用TextInputLayout控件,你需要导入两个Library。第一个是appcompat-v7,它确保material style可以向后兼容。第二个是Design Support Library。在你的build.gradle文件中,添加如下依赖:

  dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:design:22.2.0'    compile 'com.android.support:appcompat-v7:22.2.0'  }

如果Gradle没有自动询问同步项目,选择build菜单中的Make module ‘app' ,或者按F9。这样Android Studio 编译系统会自动获取必要的资源,然后你就能够使用需要的类了。

第三步:设计用户界面

这个项目的用户界面非常简单。它显示了一个“欢迎”文字(可以很容易替换成logo什么的)与两个EditText元素,一个是为用户名准备的,一个是为密码准备的。布局中还包含了一个触发登陆流程的按钮。背景颜色是扁平风格的灰色。

另一个重要的细节是记得正确设置EditText的inputType属性。第一个EditText的inputType应该设置成textEmail,而第二个应该设置成textPassword。下面是布局的样子:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:background="#e3e3e3"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:padding="@dimen/activity_horizontal_margin"    tools:context=".LoginActivity"    android:orientation="vertical">    <RelativeLayout      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:layout_weight="0.5"      android:orientation="vertical">      <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:gravity="center"        android:text="Welcome"        android:textSize="30sp"        android:textColor="#333333"/>    </RelativeLayout>    <LinearLayout      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:layout_weight="0.5"      android:orientation="vertical">      <EditText        android:id="@+id/username"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:inputType="textEmailAddress"/>      <EditText          android:id="@+id/password"          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:inputType="textPassword"/>      <Button        android:id="@+id/btn"        android:layout_marginTop="4dp"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Login"/>    </LinearLayout>  </LinearLayout>

你可能还想去掉app bar,也就是过去说的actionbar,编辑style.xml文件:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> </style>

第四步: 使用TextInputLayout

我们总算到了本教程最有趣的部分。TextInputLayout控件和LinearLayout完全一样,它只是一个容器。跟ScrollView一样,TextInputLayout只接受一个子元素。子元素需要是一个EditText元素。

  <android.support.design.widget.TextInputLayout    android:id="@+id/usernameWrapper"    android:layout_width="match_parent"    android:layout_height="wrap_content">    <EditText      android:id="@+id/username"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:inputType="textEmailAddress"      android:hint="Username"/>  </android.support.design.widget.TextInputLayout>

注意这里我在EditText中指定了另一个参数,hint。就如你知道的,这个属性允许你在EditText的内容为空的时候显示一个自定义的提示。一旦用户开始输入,hint会消失。这并不理想,因为用户丢失了他们输入信息的上下文提示。

有了TextInputLayout,这将不再是问题。一个单一的EditText 在输入文字的时候会隐藏hint,而被包含在TextInputLayout中的EditText则会让hint变成一个在EditText上方的浮动标签。同时还包括一个漂亮的material动画。

接下来,我们对password输入框做同样的事情。

  <android.support.design.widget.TextInputLayout    android:id="@+id/passwordWrapper"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_below="@id/usernameWrapper"    android:layout_marginTop="4dp">    <EditText      android:id="@+id/password"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:inputType="textPassword"      android:hint="Password"/>  </android.support.design.widget.TextInputLayout>

现在如果你运行应用,什么也不会发生。当然,EditText的hint会表现的跟预期一致。但是没有material动画也没有浮动标签。为什么会这样?我们还缺少一些代码。

第五步: 设置 Hints

下面是setContentView方法,初始化对theTextInputLayout视图的引用。

final TextInputLayout usernameWrapper = (TextInputLayout) findViewById(R.id.usernameWrapper);final TextInputLayout passwordWrapper = (TextInputLayout) findViewById(R.id.passwordWrapper);

要让浮动标签动起来,你只需设置一个hint,使用setHint方法:

usernameWrapper.setHint("Username");passwordWrapper.setHint("Password");

然后你就完成了。你的登陆界面现在很好的遵循了material设计规范。运行项目查看你的登陆界面。

怎么在Android中使用TextInputLayout创建一个登陆页面

2. 处理错误

TextInputLayout的另一个特色是它可以处理错误。通过验证输入,你可以防止用户输入无效的邮箱地址或者是太短的密码。如果没有验证,后台可能反馈回不正确的结果呈现给用户。对于用户来说既浪费了时间又体验不好。在发送到后台之前你应该先检查输入的正确性。

第一步: 实现 onClick 方法

首先你需要处理按钮的点击。有许多方法处理按钮的点击。其中一种就是写一个自定义的方法然后在xml中通过onClick属性指定,我喜欢setOnClickListener的方式,但这只是个人喜好。

  btn.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {      // STUB    }  });

我们知道当这个方法调用之后,用户不再需要键盘。不幸的是,如果你不告诉它,安卓不会自动的隐藏虚拟键盘。在onClick方法体中调用hideKeyboard。

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

第二步: 输入验证

在设置错误标签之前,我们需要定义什么是错误,什么不是。我们假设用户名必须是一个邮箱地址并且我们想阻止用户输入无效的邮箱地址。

验证邮箱地址有点复杂。我们必须依赖正则表达式。如果你想也可以使用Apache Commons library。

我使用了Wikipedia 上关于邮箱验证的指导,写了如下的正则表达式

/^[a-zA-Z0-9#_~!$&'()*+,;=:."(),:;<>@\[\]\\]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/

注:这个正则表达式的意思我就不翻译了,如果你不熟悉正则表达式看了也没啥用。

因为我们想验证字符串,我必须依赖Pattern和Matcher两个类。includeava.util.regex 包。实现如下的方法:

  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;  public boolean validateEmail(String email) {    matcher = pattern.matcher(email);    return matcher.matches();  }

密码的验证简单的多。很多组织为密码的验证采用了不同的策略,但是所有人都会限制最短长度。合理的密码应该不低于6个字符。

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

第三步: 获取数据

就如我说的,TextInputLayout只是一个容器,但是和LinearLayout和ScrollView不同,你可以使用一个特殊的方法获得子元素,getEditText,不需要使用findViewById。

public void onClick(View v) {    hideKeyboard();    String username = usernameWrapper.getEditText().getText().toString();    String password = passwordWrapper.getEditText().getText().toString();    // TODO: Checks    // TODO: Login  }

第四步: 显示错误

TextInputLayout的错误处理简单快速。需要的方法是setErrorEnabled和setError。

setError设置一个红色的错误消息,显示在EditText的下面。如果传入的参数为null,错误消息将清空。并且它会改变整个EditText控件为红色。

setErrorEnabled开启错误提醒功能。这直接影响到布局的大小,增加底部padding为错误标签让出空间。在setError设置错误消息之前开启这个功能意味着在显示错误的时候布局不会变化。你可以把这两个方法结合起来验证下我所说的。

另一个有趣的事实是如果错误功能未开启但是你调用了传入非null参数的setError,那么setErrorEnabled(true)将自动被调用。

现在我们定义了什么是错误的什么是正确的,也知道了如何获取EditText中的数据以及显示可能的错误,onClick方法的实现就很简单了。

public void onClick(View v) {    hideKeyboard();    String username = usernameWrapper.getEditText().getText().toString();    String password = usernameWrapper.getEditText().getText().toString();    if (!validateEmail(username)) {      usernameWrapper.setError("Not a valid email address!");    } else if (!validatePassword(password)) {      passwordWrapper.setError("Not a valid password!");    } else {      usernameWrapper.setErrorEnabled(false);      passwordWrapper.setErrorEnabled(false);      doLogin();    }  }

我添加了一个doLogin方法,但是目前它是空的因为这超出了本教程的范围。

public void doLogin() {    Toast.makeText(getApplicationContext(), "OK! I'm performing login.", Toast.LENGTH_SHORT).show();    // TODO: login procedure; not within the scope of this tutorial.  }

3. 样式

你可能还想做最后一件事,改变TextInputLayout控件的颜色。默认AppCompact会把它设置成绿色的,但是很有可能这个颜色会和你的颜色主题(color palette)冲突。

谷歌把Design Support Library写的很好。每一个控件的颜色都是直接通过主题颜色绘制的,在 style.xml 中指定。打开它添加colorAccent 到主题以改变表单的颜色。

 <style name="AppTheme" parent="Theme.A  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">    <item name="colorAccent">#3498db</item>  </style>

关于怎么在Android中使用TextInputLayout创建一个登陆页面问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在Android中使用TextInputLayout创建一个登陆页面

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在Android中使用TextInputLayout创建一个登陆页面

怎么在Android中使用TextInputLayout创建一个登陆页面?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 实现 TextInputLayout第一步: 创
2023-05-30

怎么在python中创建一个操作页面

这篇文章给大家介绍怎么在python中创建一个操作页面,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易
2023-06-14

使用ASP.NET怎么创建一个网站web页面

使用ASP.NET怎么创建一个网站web页面?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建网站1.从网上下载VS2017,我接触的朋友和公司大多数都是使用VS2017/VS
2023-06-14

怎么在Android中使用Kotlin实现一个登录界面

怎么在Android中使用Kotlin实现一个登录界面?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。登录界面代码如下:class LoginActivity :
2023-05-30

怎么在java中使用ThreadPoolExecutor创建一个线程池

这篇文章给大家介绍怎么在java中使用ThreadPoolExecutor创建一个线程池,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发
2023-06-14

怎么在python中使用Protobuf创建一个服务端

这期内容当中小编将会给大家带来有关怎么在python中使用Protobuf创建一个服务端,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、
2023-06-14

怎么在Html5页面中使用JSON实现一个动画

今天就跟大家聊聊有关怎么在Html5页面中使用JSON实现一个动画,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.demo.html里面有很多内联的东西,使用时堆积在页面内不好看仔
2023-06-09

怎么在html5中使用canvas创建一个太空游戏

这篇文章将为大家详细讲解有关怎么在html5中使用canvas创建一个太空游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.向网页添加 Canvas 元素2.创建黑色背景3.在背景上绘制
2023-06-09

怎么在SpringBoot利用Mybatis实现一个登录注册页面

怎么在SpringBoot利用Mybatis实现一个登录注册页面?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.环境jdk8 : “1.8.0_281”Mav
2023-06-06

使用Maven怎么在Windows环境中创建一个IDE项目

使用Maven怎么在Windows环境中创建一个IDE项目?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Maven在Windows下的配置1.Maven下载2.
2023-05-31

怎么在python中利用numpy创建一个矩阵

今天就跟大家聊聊有关怎么在python中利用numpy创建一个矩阵,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具
2023-06-14

怎么在Android中实现一个无网络页面切换功能

怎么在Android中实现一个无网络页面切换功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现思路需求是在无网络的时候显示特定的页面,想到要替换页面的地方,大多都是recy
2023-05-30

怎么在JavaWeb中利用Session实现一个用户登陆注销功能

今天就跟大家聊聊有关怎么在JavaWeb中利用Session实现一个用户登陆注销功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Cookie:cookie是客户端技术,程序把每个用
2023-05-30

怎么在Android应用中添加一个欢迎界面

这篇文章给大家介绍怎么在Android应用中添加一个欢迎界面,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。main_activity.xml文件代码如下:
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录