Android仿支付宝微信支付密码界面弹窗封装dialog

一,功能效果

二,实现过程

1,先写xml文件:dialog_keyboard.xml

注意事项

(1),密码部分用的是一个线性布局中6个TextView,并设置android:inputType="numberPassword",外框是用的一个有stroke属性的shape,

(2),1-9数字是用的recycleview ,每个item的底部和右边有1dp的黑线,填充后形成分割线。

(3),recycleview 要设置属性  android:overScrollMode="never  不然滑动键盘的时候有阴影

(4),底部三个按钮用的线性布局里的三个TextView

<span style="font-size:14px;"><?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="wrap_content"
 android:background="@color/bgItemCheck"
 android:orientation="vertical">
 <RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="60dp">
  <ImageView
   android:id="@+id/iv_close_key"
   android:layout_width="45dp"
   android:layout_height="45dp"
   android:layout_centerVertical="true"
   android:padding="10dp"
   android:src="@mipmap/icon_close" />
  <TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_centerInParent="true"
   android:text="输入密码"
   android:textColor="@color/black"
   android:textSize="20sp" />
  <View
   android:layout_width="match_parent"
   android:layout_height="1dp"
   android:layout_alignParentBottom="true"
   android:background="@color/underLine" />
 </RelativeLayout>
 <TextView
  android:id="@+id/tv_tip_money"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_margin="15dp"
  android:gravity="center"
  android:text="提现金额0元,服务费0元"
  android:textColor="@color/black" />
 <LinearLayout
  android:layout_width="335dp"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:background="@drawable/shape_bg_psw"
  android:orientation="horizontal">
  <TextView
   android:id="@+id/tv_first_num"
   android:layout_width="55dp"
   android:layout_height="55dp"
   android:gravity="center"
   android:inputType="numberPassword"
   android:textColor="@color/black"
   android:textSize="30sp" />
  <View
   android:layout_width="1dp"
   android:layout_height="match_parent"
   android:background="@color/strokePsw" />
  <TextView
   android:id="@+id/tv_second_num"
   android:layout_width="55dp"
   android:layout_height="55dp"
   android:gravity="center"
   android:inputType="numberPassword"
   android:textColor="@color/black"
   android:textSize="30sp" />
  <View
   android:layout_width="1dp"
   android:layout_height="match_parent"
   android:background="@color/strokePsw" />
  <TextView
   android:id="@+id/tv_third_num"
   android:layout_width="55dp"
   android:layout_height="55dp"
   android:gravity="center"
   android:inputType="numberPassword"
   android:textColor="@color/black"
   android:textSize="30sp" />
  <View
   android:layout_width="1dp"
   android:layout_height="match_parent"
   android:background="@color/strokePsw" />
  <TextView
   android:id="@+id/tv_fourth_num"
   android:layout_width="55dp"
   android:layout_height="55dp"
   android:gravity="center"
   android:inputType="numberPassword"
   android:textColor="@color/black"
   android:textSize="30sp" />
  <View
   android:layout_width="1dp"
   android:layout_height="match_parent"
   android:background="@color/strokePsw" />
  <TextView
   android:id="@+id/tv_fifth_num"
   android:layout_width="55dp"
   android:layout_height="55dp"
   android:gravity="center"
   android:inputType="numberPassword"
   android:textColor="@color/black"
   android:textSize="30sp" />
  <View
   android:layout_width="1dp"
   android:layout_height="match_parent"
   android:background="@color/strokePsw" />
  <TextView
   android:id="@+id/tv_sixth_num"
   android:layout_width="55dp"
   android:layout_height="55dp"
   android:gravity="center"
   android:inputType="numberPassword"
   android:textColor="@color/black"
   android:textSize="30sp" />
 </LinearLayout>
 <RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content">
  <TextView
   android:id="@+id/tv_forget_psw"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_alignParentRight="true"
   android:layout_margin="10dp"
   android:padding="5dp"
   android:text="忘记密码?"
   android:textColor="@color/mainColor"
   android:textSize="13sp"
   android:visibility="invisible" />
 </RelativeLayout>
 <android.support.v7.widget.RecyclerView
  android:id="@+id/rv_keyboard"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="30dp"
  android:background="@color/white"
  android:overScrollMode="never" />
 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="58dp"
  android:orientation="horizontal">
  <TextView
   android:layout_width="0dp"
   android:layout_height="match_parent"
   android:layout_weight="1"
   android:background="@color/bgItemPsw" />
  <TextView
   android:id="@+id/tv_zero"
   android:layout_width="0dp"
   android:layout_height="match_parent"
   android:layout_weight="1"
   android:background="@drawable/selector_bg_psw_item"
   android:gravity="center"
   android:text="0"
   android:textColor="@color/black"
   android:textSize="25sp" />
  <RelativeLayout
   android:id="@+id/rl_undo"
   android:layout_width="1dp"
   android:layout_height="match_parent"
   android:layout_weight="1"
   android:background="@drawable/selector_bg_undo">
   <ImageView
    android:layout_width="25dp"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"
    android:src="@mipmap/icon_undo" />
  </RelativeLayout>
 </LinearLayout>
</LinearLayout></span> 

2,Java代码 KeyboardDialog.java

注意事项

(1),封装成dialog,这段代码要在setContentView之前   window.requestFeature(Window.FEATURE_NO_TITLE)

(2),在构造方法中设置样式(后面详述)

(3),适配器是已封装的,用原生的也没差

(4),密码的存储和删除是操作字符串

(5),使用了butterknife  版本为:compile'com.jakewharton:butterknife:7.0.1'

(6),在设置attributes.width = ScreenUtils.getScreenWidth(context);使用了封装的方法 目的是获取屏幕的宽  可自行百度达到相同效果

<span style="font-size:14px;">public class KeyboardDialog extends Dialog {
 private final Context context;
 private final int money;
 @Bind(R.id.rv_keyboard)//数字列表
   RecyclerView rvKeyboard;
 @Bind(R.id.iv_close_key)//关闭按钮
   ImageView ivCloseKey;
 @Bind(R.id.tv_tip_money)//提现金额及手续费
   TextView tvTipMoney;
 @Bind(R.id.tv_zero)//数字0
   TextView tvZero;
 @Bind(R.id.rl_undo)//后退键
   RelativeLayout rlUndo;
 //六位密码
 @Bind(R.id.tv_first_num)
 TextView tvFirstNum;
 @Bind(R.id.tv_second_num)
 TextView tvSecondNum;
 @Bind(R.id.tv_third_num)
 TextView tvThirdNum;
 @Bind(R.id.tv_fourth_num)
 TextView tvFourthNum;
 @Bind(R.id.tv_fifth_num)
 TextView tvFifthNum;
 @Bind(R.id.tv_sixth_num)
 TextView tvSixthNum;
 private ArrayList<String> keyboardList;//数字列表
 private String psw = "";//密码
 public KeyboardDialog(Context context, int money) {
  super(context, R.style.keyboard_dialog);
  this.context = context;
  this.money = money;//要提现金额
  setCanceledOnTouchOutside(true);
 }
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Window window = this.getWindow();
  assert window != null;
  window.requestFeature(Window.FEATURE_NO_TITLE);
  window.setWindowAnimations(R.style.keyboard_dialog_anim);
  setContentView(R.layout.dialog_keyboard);
  ButterKnife.bind(this);
  WindowManager.LayoutParams attributes = window.getAttributes();
  attributes.gravity = Gravity.BOTTOM;
  attributes.width = ScreenUtils.getScreenWidth(context);
  attributes.height = GridLayoutManager.LayoutParams.WRAP_CONTENT;
  initData();
 }
 /*
 * 初始化
 * */
 private void initData() {
  keyboardList = new ArrayList<>();
  for (int i = 1; i < 10; i++) {
   keyboardList.add(i + "");
  }
  //设置要提现的金额
  tvTipMoney.setText("提现金额" + money + "元");
  GridLayoutManager glManager = new GridLayoutManager(context, 3);
  rvKeyboard.setLayoutManager(glManager);
  RcyCommonAdapter adapter = getAdapter();
  rvKeyboard.setAdapter(adapter);
 }
 private RcyCommonAdapter getAdapter() {
  return new RcyCommonAdapter<String>(context, keyboardList, false, rvKeyboard) {
   @Override
   public void convert(RcyViewHolder holder, String keyboard) {
    TextView tvKeyboard = holder.getView(R.id.tv_keyboard_item);
    tvKeyboard.setText(keyboard);
   }
   @Override
   public int getmLayoutId(int position) {
    return R.layout.item_keyboard;
   }
   @Override
   public void onItemClickListener(int position) {
    inputNum(position + 1 + "");
   }
  };
 }
 /*
 * 输入密码 先判断现有密码长度并设置显示输入了密码 添加密码到密码字符串
 * 后判断输入后密码的长度 如果等于6则关闭并请求服务器
 * */
 private void inputNum(String num) {
  switch (psw.length()) {
   case 0:
    tvFirstNum.setText(num);
    break;
   case 1:
    tvSecondNum.setText(num);
    break;
   case 2:
    tvThirdNum.setText(num);
    break;
   case 3:
    tvFourthNum.setText(num);
    break;
   case 4:
    tvFifthNum.setText(num);
    break;
   case 5:
    tvSixthNum.setText(num);
    break;
  }
  psw += num;
  if (psw.length() == 6) {
   //TODO 请求服务器 密码为 psw
   Log.d("psw", psw);
   dismiss();
  }
 }
 @OnClick({R.id.iv_close_key, R.id.tv_zero, R.id.rl_undo})
 public void onClick(View view) {
  switch (view.getId()) {
   case R.id.iv_close_key://关闭dialog
    dismiss();
    break;
   case R.id.tv_zero://输入0
    inputNum("0");
    break;
   case R.id.rl_undo://删除输入的密码
    deleteNum();
    break;
  }
 }
 /*
 * 删除密码 根据已输入的密码长度将对应的textview设置为空
 * 并将密码字符串最后一位切割掉
 * */
 private void deleteNum() {
  switch (psw.length()) {
   case 1:
    tvFirstNum.setText("");
    psw = "";
    break;
   case 2:
    tvSecondNum.setText("");
    psw = psw.substring(0, 1);
    break;
   case 3:
    tvThirdNum.setText("");
    psw = psw.substring(0, 2);
    break;
   case 4:
    tvFourthNum.setText("");
    psw = psw.substring(0, 3);
    break;
   case 5:
    tvFifthNum.setText("");
    psw = psw.substring(0, 4);
    break;
  }
 }
}</span><span style="font-size:18px;">
</span> 

3,设置弹框样式

(1),在构造方法中设置样式  R.style.keyboard_dialog

<span style="font-size:14px;">public KeyboardDialog(Context context, int money) {
  super(context, R.style.keyboard_dialog);
  this.context = context;
  this.money = money;//要提现金额
  setCanceledOnTouchOutside(true);
 }</span> 

样式代码为

<span style="font-size:14px;"><style name="keyboard_dialog" parent="AppTheme.base">
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:windowFrame">@null</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowIsFloating">true</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowContentOverlay">@null</item>
  <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
  <item name="android:backgroundDimEnabled">true</item>
 </style></span> 

(2),在onCreate方法中设置弹框动画样式

<span style="font-size:14px;">window.setWindowAnimations(R.style.keyboard_dialog_anim);</span> 

样式代码为

<span style="font-size:14px;"><style name="keyboard_dialog_anim">
  <item name="android:windowEnterAnimation">@anim/enter_dialog_anim</item>
  <item name="android:windowExitAnimation">@anim/exit_dialog_anim</item>
 </style></span> 

三,调用

调用很简单 一行就可以  需要返回数据就需要自行添加了

<span style="font-size:14px;">  new KeyboardDialog(this, 1000).show();</span> 

下面给大家推荐有关本站android方面的专题,大家可以参考下:

android 验证码功能  http://www.jb51.net/Special/899.htm

Android RecyclerView使用方法汇总    http://www.jb51.net/Special/855.htm

Android ListView常见功能   http://www.jb51.net/Special/850.htm

Android控件imageview详细用法   http://www.jb51.net/Special/726.htm

Android SDK基础教程   http://www.jb51.net/Special/637.htm

Android 开发中缓存知识汇总  http://www.jb51.net/Special/622.htm

以上所述是小编给大家介绍的Android仿支付宝微信支付密码界面弹窗封装dialog,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

随机推荐

  • SQLServer2005安装提示服务无法启动原因分析及解决
  • 多代理服务器软件MultiProxy的图文使用教程
  • 在centos7下安装python3的步骤
  • Docker为网络bridge模式指定容器ip的方法
  • IOS swift3.0 下闭包语法整理
  • iOS开发中#import、#include和@class的区别解析
  • 万能的php分页类
  • 基于C语言sprintf函数的深入理解
  • 详解C++ 拷贝构造函数和赋值运算符
  • MySql带OR关键字的多条件查询语句
  • php下使用curl模拟用户登陆的代码
  • JQuery的AJAX实现文件下载的小例子
  • 关于Linux操作系统下终端乱码的完美解决方法
  • 分享一些常用的jQuery动画事件和动画函数
  • JavaScript中的私有/静态属性介绍
  • The application has failed...(应用程序配置不正确)
  • Java实现支付宝之第三方支付宝即时到账支付功能
  • JAVA 静态的单例的实例详解
  • 微软 Visual Studio 2010官方下载地址给大家
  • 基于JavaScript实现百度搜索框效果

深圳坪山网站建设公司怎样优化手机网站关如何优化网站用户体验古镇网站优化排名珠海企业网站优化永川网站排名优化推荐餐饮行业网站优化需要多少钱西安网站关键词优化方式开封信阳网站优化优化公司网站传开易速达上海优化网站哪家专业常州网站优化找哪家揭阳网站优化哪家快平顶山专业网站优化地址牙克石网站优化如何查看网站优化程度手动优化网站郑州网站关键词优化公司信阳网站关键词优化排名多少钱怎样找优化不好的网站北京网站排名优化选择华网天下重庆网站优化推广方案淮北网站优化公司去哪找平顶山网站seo优化哪里好华富网站优化公司南山网站优化托管天津百度seo网站优化河南家居行业网站优化推广怎么样亦庄企业网站优化机械设备网站优化口碑好的网站优化排名软件香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化