EditText实现(修改密码提示验证信息需求)
2016-08-31 20:50
603 查看
最近写博客的节奏懈怠了啊,因为公司终于来需求了,让我做密码管理功能模块,我也算是闲了个把月了,敲了一天代码,才找到以前的一点点感觉,哈哈~!!! 刚开始做就遇到奇葩产品订的需求,需要在EditText中提示密码错误啊,之类的提示,唉唉!没办法,只能硬着头皮上,于是写了个Demo,感觉挺简单哈……被自己欺骗了。
先给出githubdemo链接:https://github.com/913453448/EditViewDemo
看看demo的效果图:
不太好录屏,说一下产品的需求(想必大家都应该很清楚这些逻辑判断了):
1、当所有的输入框都输入的时候,“确定”按钮变为蓝色。
2、当某一项没有输入的时候点击“确定”按钮,焦点指向没输入的一项。
3、当密码没有满6位的时候在输入框中提示红色的“密码格式错误”,点击后恢复为灰色的“请输入六位密码”。
4、当原密码错误的时候提示红色的“原密码错误”
5……..一些细节我就不说了,运行下demo就可以啦~!
为什么写这篇博客呢,也就当一个笔记吧,以后再遇到的时候直接 copy了,如果有一样需求的直接拖走啊~!!
layout文件:
布局还是比较简单啊,想必大家分分钟就敲出来了,
先说说Button在蓝色selector与灰色selector切换方式:
这里偷了下懒,直接用一个selector文件就搞定了,当按钮的状态为android:state_pressed=”true” 并且android:state_selected=”true”这两个状态的时候设置background为蓝色,正常状态就为灰色了。然后通过不断监听三个EditText的内容变换动态的设置Button的setSelected()来控制按钮颜色。
对应MainActivity中代码:
是不是很简单,哭死,以前我还手动设置背景那种方式不断的切换背景从而达到变色效果,真是慢慢的进步啊。
下面 说说在EditText中展示提示语:也就是动态设置EditText的hint内容和hint的颜色,然后通过et.requestFocus();方法使焦点放在指定的EditText上。
方法都挺简单的,主要看代码逻辑了。
我直接贴出逻辑判断的所有代码了,大家应该都看得懂:
先给出githubdemo链接:https://github.com/913453448/EditViewDemo
看看demo的效果图:
不太好录屏,说一下产品的需求(想必大家都应该很清楚这些逻辑判断了):
1、当所有的输入框都输入的时候,“确定”按钮变为蓝色。
2、当某一项没有输入的时候点击“确定”按钮,焦点指向没输入的一项。
3、当密码没有满6位的时候在输入框中提示红色的“密码格式错误”,点击后恢复为灰色的“请输入六位密码”。
4、当原密码错误的时候提示红色的“原密码错误”
5……..一些细节我就不说了,运行下demo就可以啦~!
为什么写这篇博客呢,也就当一个笔记吧,以后再遇到的时候直接 copy了,如果有一样需求的直接拖走啊~!!
layout文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=match_parent android:layout_height=match_parent android:orientation=vertical android:background=#eee > <LinearLayout android:layout_width=match_parent android:layout_height=wrap_content android:orientation=horizontal android:gravity=center_vertical android:background=#fff android:padding=15dp > <TextView android:layout_width=wrap_content android:layout_height=wrap_content android:text=原密码: /> <EditText android:id="@+id/id_orgin_et" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="3dp" android:background="@null" android:inputType="numberPassword" android:hint="请输入六位密码" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" android:background="#fff" android:padding="15dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="新密码:" /> <EditText android:id="@+id/id_new_et" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="3dp" android:background="@null" android:hint="请输入六位密码" android:inputType="numberPassword" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" android:background="#fff" android:padding="15dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确认密码:" /> <EditText android:id="@+id/id_confirm_et" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="3dp" android:background="@null" android:hint="请输入六位密码" android:inputType="numberPassword" /> </LinearLayout> <Button android:id="@+id/id_confirm_bt" android:layout_marginTop="15dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_width="match_parent" android:layout_height="44dp" android:text="确定" android:textSize="15sp" android:textColor="#fff" android:background=@drawable/button_selector /> </LinearLayout>
布局还是比较简单啊,想必大家分分钟就敲出来了,
先说说Button在蓝色selector与灰色selector切换方式:
这里偷了下懒,直接用一个selector文件就搞定了,当按钮的状态为android:state_pressed=”true” 并且android:state_selected=”true”这两个状态的时候设置background为蓝色,正常状态就为灰色了。然后通过不断监听三个EditText的内容变换动态的设置Button的setSelected()来控制按钮颜色。
<?xml version=1.0 encoding=utf-8?> <selector xmlns:android=http://schemas.android.com/apk/res/android> <item android:state_pressed=true android:state_selected=true> <shape> <corners android:radius=5dp> </corners> </solid> </shape> </item> <item android:state_selected=false> <shape> <corners android:radius=5dp> </corners> <solid android:color=@android:color/darker_gray> </solid> </shape> </item> <item> <shape> <corners android:radius=5dp> </corners> <solid android:color=@color/colorPrimary></solid> </shape> </item> </selector>
对应MainActivity中代码:
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { /** * 当三个EditText的内容都不为空的时候, * Button为蓝色,否则为灰色通过 * bt_confirm.setSelected(true)实现蓝色, * bt_confirm.setSelected(false);实现灰色 */ if(!TextUtils.isEmpty(et_confirm.getText().toString())&&!TextUtils.isEmpty(et_orgin.getText().toString()) &&!TextUtils.isEmpty(et_new.getText().toString())){ bt_confirm.setSelected(true); }else{ bt_confirm.setSelected(false); } } @Override public void afterTextChanged(Editable s) { }
是不是很简单,哭死,以前我还手动设置背景那种方式不断的切换背景从而达到变色效果,真是慢慢的进步啊。
下面 说说在EditText中展示提示语:也就是动态设置EditText的hint内容和hint的颜色,然后通过et.requestFocus();方法使焦点放在指定的EditText上。
方法都挺简单的,主要看代码逻辑了。
我直接贴出逻辑判断的所有代码了,大家应该都看得懂:
package com.cisetech.editviewdemo; import android.app.ProgressDialog; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements TextWatcher, View.OnClickListener { private EditText et_orgin; private EditText et_new; private EditText et_confirm; private Button bt_confirm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initView() { et_orgin= (EditText) findViewById(R.id.id_orgin_et); et_confirm= (EditText) findViewById(R.id.id_confirm_et); et_new= (EditText) findViewById(R.id.id_new_et); bt_confirm= (Button) findViewById(R.id.id_confirm_bt); et_confirm.addTextChangedListener(this); et_orgin.addTextChangedListener(this); et_new.addTextChangedListener(this); bt_confirm.setSelected(false); bt_confirm.setOnClickListener(this); et_orgin.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { clearAll(); return false; } }); et_new.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { clearAll(); return false; } }); et_confirm.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { clearAll(); return false; } }); } private void initData() { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { /** * 当三个EditText的内容都不为空的时候, * Button为蓝色,否则为灰色通过 * bt_confirm.setSelected(true)实现蓝色, * bt_confirm.setSelected(false);实现灰色 */ if(!TextUtils.isEmpty(et_confirm.getText().toString())&&!TextUtils.isEmpty(et_orgin.getText().toString()) &&!TextUtils.isEmpty(et_new.getText().toString())){ bt_confirm.setSelected(true); }else{ bt_confirm.setSelected(false); } } @Override public void afterTextChanged(Editable s) { } private ProgressDialog dialog; @Override public void onClick(View v) { if(checkNull()){ return; } if(!et_confirm.getText().toString().equals(et_new.getText().toString())){ et_confirm.setText(""); requstFocus(et_confirm, "两次密码不一致", Color.RED,true); return; } dialog=ProgressDialog.show(this,"","修改中,请稍后...",true); new Handler().postDelayed(new Runnable() { @Override public void run() { if(!"123456".equals(et_orgin.getText().toString())){ et_orgin.setText(""); requstFocus(et_orgin, "原密码错误", Color.RED, true); }else{ Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_SHORT).show(); } dialog.dismiss(); } },3000); } private boolean checkNull() { if(TextUtils.isEmpty(et_orgin.getText().toString())){ requstFocus(et_orgin, null, Color.GRAY,true); return true; } if(et_orgin.getText().toString().length()<6){ et_orgin.setText(""); requstFocus(et_orgin, "原密码格式错误", Color.RED,true); return true; } if(TextUtils.isEmpty(et_new.getText().toString())){ requstFocus(et_new, null, Color.GRAY,true); return true; } if(et_new.getText().toString().length()<6){ et_new.setText(""); requstFocus(et_new, "新密码格式错误", Color.RED,true); return true; } if(TextUtils.isEmpty(et_confirm.getText().toString())){ requstFocus(et_confirm,null, Color.GRAY,true); return true; } return false; } public void requstFocus(EditText et,String hint,int hintColor,boolean needFocus){ if(hint==null){ hint="请输入六位密码"; } et.setHint(hint); et.setHintTextColor(hintColor); if(needFocus){ et.requestFocus(); } } public void clearAll(){ requstFocus(et_orgin, null, Color.GRAY,false); requstFocus(et_new, null, Color.GRAY,false); requstFocus(et_confirm,null, Color.GRAY,false); } }
相关文章推荐
- Android—Android中监听EditText文本输入,实现修改用户名,清除密码
- android注册新用户时用户名、密码验证信息实时提示实现
- jQuery实现TEXT文本框输入时的提示信息(谷歌百度淘宝搜索框提示实现)
- 简单实现显示隐藏密码,在EditText中。
- ECSHOP用户中心"用户信息"修改增加密码问题验证
- jquery实现文本框闪烁提示用户验证信息
- jQuery+ajax实现修改密码验证
- 一个流行且实用的JS表单验证提示,演示了怎么自定义错误信息的显示方式,同时通过写FormValid.showError类方法来实现错误显示方式自定义: errMsg 是一个错误消息的数组,这样方便自定
- jquery实现用户信息修改验证输入方法汇总
- 创建并部署一个Servlet,要求在实现用户登录功能,当用户名和密码正确时跳转到欢迎页面,否则提示出错信息
- 修改Bugfree实现多指派 必填项 下拉列表 提示信息
- MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息
- MVC3中实现验证提示信息多语言支持
- (六)SSO之CAS框架扩展 修改CAS源码实现与ESS动态密码验证对接
- 实现的效果:EditText提示文本字体大小和输入文本字体大小不同
- 一个EditText,实现无边框,无背景,输入提示图标高亮闪动。
- MVC3中使用验证适配器修改默认的验证提示信息
- Ext JS 中实现自定义验证 密码修改 确认密码
- Android EditText中输入值以星号*显示 (密码的实现)
- 为EditText输入框加上提示信息