博主作为一名Android开发新人参与的第一个项目,是开发一个直播软件,我负责信息验证、登录以及设置等功能的实现。坦白讲功能逻辑很简单,如果做Demo大概不过一天工夫。但如果要做得很漂亮,给用户一种非常好的使用体验,一些细节还真的需要仔细琢磨。下面我将分享一下在开发登录功能时遇到的一些值得记录的东西。
通常来说登录页面包含两个 EditText,分别对应使用者的账号密码(手机端验证码出现比较少,暂不考虑),不妨先来说说一款优秀的手机应用登录页面应该包含哪些人性化的小组件。
功能组件的设置
1.很多应用的EditText为了给用户一个非常好的 交互感受,会在 左端 设计一个表示输入内容的 小图标。如“账号”出设置一个人头像,“密码”处设置一把锁头或钥匙,“搜索”处设置一个放大镜等等。这个时候要用到以下几个属性:
1 | android:drawableLeft //设置位于EditText左边的小图标 |
2.由于Android 原生EditText 的下划线视觉体验非常一般,很多UI设计师选择设计其他样式或者颜色的下划线,这时候就需要 取消 原生EditText下划线的显示,而使用 ImageView 画一条下划线。
1 | android:background="@null" //取消原生EditText下划线的显示 |
3.一个用户体验较好的EditText,还应该在输入框右端设置一个 × 图标,用于一键清空输入的文本信息。实现的方法类似于上述设置左端小图标,还需要补充的是在登录的Activity类中为 ImageView 设置 onclick() 方法,在方法中加入 EditText.setText(“”); 即可。
4.在登录Activity中,最好包含 记住账号密码 功能,为了操作简便笔者在登录成功后直接将账号和密码写入到 SharedPreferences 中,在 onCreate() 方法中读取账号密码并将二者 回显到EditText 中(因为是公司内部用的软件所以只考虑每部手机绑定一个账号,没有使用下拉列表)。如果要绑定多个账号密码请选择使用带下拉框的EditText进行回显。
值得深究的细节
以上是登录页面的常规功能的实现,下面来说说开发登录功能时应该注意的小细节:
- 将EditText的 maxLines属性设为1。程序员们编程普遍的思想是先思考 我在使用这个APP的时候会做哪些事?,然后将这些事情解决就好了。但是产品经理或测试思考的是 一个傻瓜在使用这个APP的时候会做哪些事?,这就非常需要我们程序员们做好限制了。虽说一般不会有人的账号密码足够长到第二行去,也不会输入到一半莫名其妙按回车键,但如果真的有这种情况出现导致布局变形或是程序崩溃,最终需要负责任的仍然是我们程序员。
- 在EditText中 禁用回车键。原因同上,但实现起来却出现了一些状况。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (v.getId()) {
case R.id.et_username:
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
return true;
}
return false;
case R.id.et_password:
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
return true;
}
return false;
}
return false;
}
返回值为 true 代表你将该输入值拦截下来 自定义处理,为 false 则代表 不做任何处理。代码逻辑没有任何问题,回车键也确实已经失效,但当我在密码框输入密码后无意中按下了 完成 键时,程序报出空指针异常(三星输入法)。原因是三星键盘中 完成 键可以被onEditorAction() 方法拦截到,但特别奇怪的是 该按键为null,并不属于KeyEvent类型,所以 event.getKeyCode() 处会出现异常。
解决的方法是:在 onEditorAction() 方法第一行先 判断传入的event对象是否为空。
1 | if (event == null) { |