我们先来照图分析一下:
(1)限制输入6位,每一位都有自己的框格,每个格显示一位;
(2)有回退/取消支付按钮;
(3)有忘记密码链接;
(4)自定义的只能输入数字的键盘输入区;
(5)在6位输完后自动进行密码校验和支付交易。如上图左边是iOS支付宝支付密码输入控件,右边是我模仿实现的效果。
首先,我们需要一个页面来完成以上的静态布局,.xml代码如下:
其中需要圆角背景shape_input_area.xml:
需要数字按钮的背景selector_gride.xml:
-
-
-
需要回退键背景selector_key_del.xml:
-
-
-
下面来完成我们的自定义控件PasswordView. Java
:
public class PasswordView extends RelativeLayout implements View.OnClickListener {
Context context;
private String strPassword; //输入的密码
private TextView[] tvList; //用数组保存6个TextView,为什么用数组?
//因为就6个输入框不会变了,用数组内存申请固定空间,比List省空间(自己认为)
private GridView gridView; //用GrideView布局键盘,其实并不是真正的键盘,只是模拟键盘的功能
private ArrayList
/**
* Belong to the Project —— MyPayUI
* Created by WangJ on 2015/11/25 17:15.
*
* 自定义接口,用于给密码输入完成添加回掉事件
*/
public interface OnPasswordInputFinish {
void inputFinish();
}
还有就是Adapter中用到的每个按钮Item的布局item_gride.xml:
好了,到此我们的自定义控件——模仿支付宝6位支付密码输入控件就完成了,下边我们在Activity中用一下,检验一下效果:
我们在MianActivity中用用一下我们定义好的控件:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/************* 第一种用法————开始 ***************/
setContentView(R.layout.activity_main);
final PasswordView pwdView = (PasswordView) findViewById(R.id.pwd_view);
//添加密码输入完成的响应
pwdView.setOnFinishInput(new OnPasswordInputFinish() {
@Override
public void inputFinish() {
//输入完成后我们简单显示一下输入的密码
//也就是说——>实现你的交易逻辑什么的在这里写
Toast.makeText(MainActivity.this, pwdView.getStrPassword(), Toast.LENGTH_SHORT).show();
}
});
/**
* 可以用自定义控件中暴露出来的cancelImageView方法,重新提供相应
* 如果写了,会覆盖我们在自定义控件中提供的响应
* 可以看到这里toast显示 "Biu Biu Biu"而不是"Cancel"*/
pwdView.getCancelImageView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Biu Biu Biu", Toast.LENGTH_SHORT).show();
}
});
/************ 第一种用法————结束 ******************/
/************* 第二种用法————开始 *****************/
// final PasswordView pwdView = new PasswordView(this);
// setContentView(pwdView);
// pwdView.setOnFinishInput(new OnPasswordInputFinish() {
// @Override
// public void inputFinish() {
// Toast.makeText(MainActivity.this, pwdView.getStrPassword(), Toast.LENGTH_SHORT).show();
// }
// });
/************** 第二种用法————结束 ****************/
}
}