
跟选择yhk界面类似,也是用一个PopupWindow,不过输入密码界面是一个自定义view,当输入六位密码完成后用回调在Activity中获取到输入的密码并以Toast显示密码。效果图如下:@H_301_1@
@H_301_1@@H_301_1@
自定义view布局效果图及代码如下:@H_301_1@
@H_301_1@@H_301_1@
<?xml version="1.0" enCoding="utf-8"?><relativeLayoutxmlns:androID="http://schemas.androID.com/apk/res/androID"androID:layout_wIDth="match_parent"androID:layout_height="wrap_content"androID:background="@drawable/bg_pop_window"androID:orIEntation="vertical"><linearLayoutandroID:ID="@+ID/ll_main_password"androID:layout_wIDth="match_parent"androID:layout_height="wrap_content"androID:layout_alignParentBottom="true"androID:background="#fff"androID:orIEntation="vertical"><relativeLayoutandroID:layout_wIDth="match_parent"androID:layout_height="50dp"><ImageVIEwandroID:ID="@+ID/iv_pay_back"androID:layout_wIDth="wrap_content"androID:layout_height="wrap_content"androID:layout_centerVertical="true"androID:layout_marginleft="10dp"androID:background="@drawable/back_white"/><TextVIEwandroID:ID="@+ID/tv_pay_Title"androID:layout_wIDth="wrap_content"androID:layout_height="wrap_content"androID:layout_centerHorizontal="true"androID:layout_marginleft="15dp"androID:layout_margintop="15dp"androID:text="标题"androID:textcolor="#333"androID:textSize="18dp"/></relativeLayout><VIEwandroID:layout_wIDth="match_parent"androID:layout_height="0.5dp"androID:background="#e5e5e5"/><!-- 6位密码框布局,需要一个圆角边框的shape作为layout的背景 --><linearLayoutandroID:layout_wIDth="match_parent"androID:layout_height="wrap_content"androID:layout_marginleft="20dp"androID:layout_marginRight="20dp"androID:layout_margintop="20dp"androID:background="@drawable/shape_input_area"androID:orIEntation="horizontal"><!-- inputType设置隐藏密码明文textSize设置大一点,否则“点”太小了,不美观 --><TextVIEwandroID:ID="@+ID/tv_pass1"androID:layout_wIDth="0dp"androID:layout_height="wrap_content"androID:layout_weight="1"androID:gravity="center"androID:inputType="numberPassword"androID:paddingBottom="5dp"androID:paddingtop="5dp"androID:textSize="32sp"/><VIEwandroID:layout_wIDth="1dp"androID:layout_height="match_parent"androID:background="#e5e5e5"/><TextVIEwandroID:ID="@+ID/tv_pass2"androID:layout_wIDth="0dp"androID:layout_height="wrap_content"androID:layout_weight="1"androID:gravity="center"androID:inputType="numberPassword"androID:paddingBottom="5dp"androID:paddingtop="5dp"androID:textSize="32sp"/><VIEwandroID:layout_wIDth="1dp"androID:layout_height="match_parent"androID:background="#e5e5e5"/><TextVIEwandroID:ID="@+ID/tv_pass3"androID:layout_wIDth="0dp"androID:layout_height="wrap_content"androID:layout_weight="1"androID:gravity="center"androID:inputType="numberPassword"androID:paddingBottom="5dp"androID:paddingtop="5dp"androID:textSize="32sp"/><VIEwandroID:layout_wIDth="1dp"androID:layout_height="match_parent"androID:background="#e5e5e5"/><TextVIEwandroID:ID="@+ID/tv_pass4"androID:layout_wIDth="0dp"androID:layout_height="wrap_content"androID:layout_weight="1"androID:gravity="center"androID:inputType="numberPassword"androID:paddingBottom="5dp"androID:paddingtop="5dp"androID:textSize="32sp"/><VIEwandroID:layout_wIDth="1dp"androID:layout_height="match_parent"androID:background="#e5e5e5"/><TextVIEwandroID:ID="@+ID/tv_pass5"androID:layout_wIDth="0dp"androID:layout_height="wrap_content"androID:layout_weight="1"androID:gravity="center"androID:inputType="numberPassword"androID:paddingBottom="5dp"androID:paddingtop="5dp"androID:textSize="32sp"/><VIEwandroID:layout_wIDth="1dp"androID:layout_height="match_parent"androID:background="#e5e5e5"/><TextVIEwandroID:ID="@+ID/tv_pass6"androID:layout_wIDth="0dp"androID:layout_height="wrap_content"androID:layout_weight="1"androID:gravity="center"androID:inputType="numberPassword"androID:paddingBottom="5dp"androID:paddingtop="5dp"androID:textSize="32sp"/></linearLayout><TextVIEwandroID:ID="@+ID/tv_pay_forgetPwd"androID:layout_wIDth="wrap_content"androID:layout_height="wrap_content"androID:layout_gravity="right"androID:layout_margin="15dp"androID:text="忘记密码?"androID:textcolor="#354EEF"/><!-- 输入键盘 --><GrIDVIEwandroID:ID="@+ID/gv_keybord"androID:layout_wIDth="match_parent"androID:layout_height="wrap_content"androID:layout_below="@ID/ll_main_password"androID:layout_margintop="30dp"androID:horizontalSpacing="0.5dp"androID:background="#8E8E8E"androID:numColumns="3"androID:verticalSpacing="0.5dp"/></linearLayout></relativeLayout>
java代码@H_301_1@
/*** Created by zhpan on 2016/9/25.*/public class PayVIEw extends relativeLayout{private MainActivity mContext;private String mStringPassword; //输入的密码private TextVIEw[] mTextVIEwPsw; // 用数组保存6个TextVIEwprivate GrIDVIEw mGrIDVIEw; //支付键盘布局private ArrayList<Map<String,String>> valueList;private ImageVIEw mImageVIEwCancel;private TextVIEw mTextVIEwForgetPsw;private int currentIndex = -1;// 用于记录当前输入密码格位置private VIEw mVIEw;private TextVIEw mTextVIEwTitle;private TextVIEw mTextVIEwDel;public PayVIEw(Context context) {super(context,null);}public PayVIEw(Context context,AttributeSet attrs) {super(context,attrs);mContext = (MainActivity) context;mVIEw = VIEw.inflate(context,R.layout.pay_vIEw,null);valueList = new ArrayList<>();mTextVIEwPsw = new TextVIEw[6];mImageVIEwCancel = (ImageVIEw) mVIEw.findVIEwByID(R.ID.iv_pay_back);mTextVIEwPsw[0] = (TextVIEw) mVIEw.findVIEwByID(R.ID.tv_pass1);mTextVIEwPsw[1] = (TextVIEw) mVIEw.findVIEwByID(R.ID.tv_pass2);mTextVIEwPsw[2] = (TextVIEw) mVIEw.findVIEwByID(R.ID.tv_pass3);mTextVIEwPsw[3] = (TextVIEw) mVIEw.findVIEwByID(R.ID.tv_pass4);mTextVIEwPsw[4] = (TextVIEw) mVIEw.findVIEwByID(R.ID.tv_pass5);mTextVIEwPsw[5] = (TextVIEw) mVIEw.findVIEwByID(R.ID.tv_pass6);mGrIDVIEw = (GrIDVIEw) mVIEw.findVIEwByID(R.ID.gv_keybord);mTextVIEwTitle = (TextVIEw) mVIEw.findVIEwByID(R.ID.tv_pay_Title);mTextVIEwForgetPsw = (TextVIEw) mVIEw.findVIEwByID(R.ID.tv_pay_forgetPwd);setVIEw();addVIEw(mVIEw); //必须要,不然不显示控件}// 初始化按钮上应该显示的数字private voID setVIEw() {for (int i = 1; i < 13; i++) {Map<String,String> map = new HashMap<>();if (i < 10) {map.put("name",String.valueOf(i));} else if (i == 10) {map.put("name","");} else if (i == 11) {map.put("name",String.valueOf(0));} else if (i == 12) {map.put("name","<-");}valueList.add(map);}mGrIDVIEw.setAdapter(adapter);}/*** 设置监听方法,在第6位输入完后触发*/public voID setonFinishinput(final OnPasswordinputFinish pass) {mTextVIEwPsw[5].addTextChangedListener(new TextWatcher() {@OverrIDepublic voID beforeTextChanged(CharSequence s,int start,int count,int after) {}@OverrIDepublic voID onTextChanged(CharSequence s,int before,int count) {}@OverrIDepublic voID afterTextChanged(Editable s) {if (s.toString().length() == 1) {mStringPassword = ""; //每次触发都要将mStringPassword置空再重新获取,避免由于输入删除再输入造成混乱for (int i = 0; i < 6; i++) {mStringPassword += mTextVIEwPsw[i].getText().toString().trim();}pass.inputFinish();//接口中要实现的方法,完成密码输入完成后的响应逻辑}}});}/*** 获取输入的密码*/public String getpassword() {return mStringPassword;}/*** 返回取消支付的ImageVIEw*/public ImageVIEw getCancel() {return mImageVIEwCancel;}/*** 返回忘记密码的TextVIEw*/public TextVIEw getForgetPsw() {return mTextVIEwForgetPsw;}/*** 返回标题的TextVIEw*/public TextVIEw getTitle() {return mTextVIEwTitle;}// GrIDVIEw的适配器BaseAdapter adapter = new BaseAdapter() {@OverrIDepublic int getCount() {return valueList.size();}@OverrIDepublic Object getItem(int position) {return valueList.get(position);}@OverrIDepublic long getItemID(int position) {return position;}@OverrIDepublic VIEw getVIEw(final int position,VIEw convertVIEw,VIEwGroup parent) {VIEwHolder holder;if (convertVIEw == null) {convertVIEw = VIEw.inflate(mContext,R.layout.item_pay_grIDe,null);holder = new VIEwHolder();holder.btnKey = (TextVIEw) convertVIEw.findVIEwByID(R.ID.btn_keys);convertVIEw.setTag(holder);} else {holder = (VIEwHolder) convertVIEw.getTag();}holder.btnKey.setText(valueList.get(position).get("name"));if (position == 9) {holder.btnKey.setBackgroundResource(R.drawable.selector_key_del);}if (position == 11) {mTextVIEwDel = holder.btnKey;holder.btnKey.setBackgroundResource(R.drawable.selector_key_del);}holder.btnKey.setonClickListener(new OnClickListener() {@OverrIDepublic voID onClick(VIEw v) {if (position < 11 && currentIndex != 9&&position!=9) { //点击0-9按钮if (currentIndex >= -1 && currentIndex < 5) { //判断输入位置mTextVIEwPsw[++currentIndex].setText(valueList.get(position).get("name"));}} else {if (position == 11) { //点击退格键if (currentIndex - 1 >= -1) { // 判断是否删除完毕mTextVIEwPsw[currentIndex--].setText("");}}if(position==9){}}}});return convertVIEw;}};static class VIEwHolder {public TextVIEw btnKey;}}PopupWindow中直接使用该控件@H_301_1@
<?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"><com.example.zhpan.mypayui.PayVIEwandroID:ID="@+ID/pv_pop_win"androID:layout_wIDth="match_parent"androID:layout_height="match_parent"/></linearLayout>
MainActivity中显示PupupWindow@H_301_1@
public class MainActivity extends AppCompatActivity implements VIEw.OnClickListener {private TextVIEw mTextVIEw;private PopupWindow mPopupWindow;private VIEw popVIEw;private PayVIEw mPayVIEw;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentVIEw(R.layout.activity_main);initVIEw();setListener();}private voID initVIEw() {mTextVIEw = (TextVIEw) findVIEwByID(R.ID.tv_main_pay);}private voID setListener() {mTextVIEw.setonClickListener(this);}// 显示d窗public voID showPopupWindow() {// 初始化d窗popVIEw = VIEw.inflate(this,R.layout.pop_window,null);mPopupWindow = new PopupWindow(popVIEw,VIEwGroup.LayoutParams.MATCH_PARENT,VIEwGroup.LayoutParams.MATCH_PARENT);mPayVIEw = (PayVIEw) popVIEw.findVIEwByID(R.ID.pv_pop_win);mPayVIEw.getTitle().setText("选择到账yhk");// 设置动画mPopupWindow.setAnimationStyle(R.style.popwin_anim_style);mPopupWindow.showAsDropDown(findVIEwByID(R.ID.ll_main),0);mPopupWindow.setoutsIDetouchable(true);mPayVIEw.setonFinishinput(new OnPasswordinputFinish() {@OverrIDepublic voID inputFinish() {Toast.makeText(MainActivity.this,mPayVIEw.getpassword(),Toast.LENGTH_SHORT).show();}});mPayVIEw.getCancel().setonClickListener(this);mPayVIEw.getForgetPsw().setonClickListener(this);}@OverrIDepublic voID onClick(VIEw v) {switch (v.getID()) {case R.ID.tv_main_pay:showPopupWindow();break;case R.ID.iv_pay_back:mPopupWindow.dismiss();break;case R.ID.tv_pay_forgetPwd:Toast.makeText(MainActivity.this,"忘记密码",Toast.LENGTH_SHORT).show();break;}}}以上所述是小编给大家介绍的AndroID自定义view仿支付宝输入六位密码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!@H_301_1@ 总结
以上是内存溢出为你收集整理的Android自定义View仿支付宝输入六位密码功能全部内容,希望文章能够帮你解决Android自定义View仿支付宝输入六位密码功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)