一,功能效果

二,实现过程
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=""
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 验证码功能 //www./Special/899.htm
Android RecyclerView使用方法汇总 //www./Special/855.htm
Android ListView常见功能 //www./Special/850.htm
Android控件imageview详细用法 //www./Special/726.htm
Android SDK基础教程 //www./Special/637.htm
Android 开发中缓存知识汇总 //www./Special/622.htm
以上所述是小编给大家介绍的Android仿支付宝微信支付密码界面弹窗封装dialog,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android 支付密码界面弹窗
# android dialog弹窗
# 小编
# 输入密码
# 的是
# 使用了
# 也没
# 在此
# 要在
# 这段
# 给大家
# 很简单
# 并将
# 忘记密码
# 验证码
# 所述
# 支付宝
# 给我留言
# 感谢大家
# 就可以
# 为空
# 密码为
相关文章:
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Python路径拼接规范_跨平台处理说明【指导】
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何获取PHP WAP自助建站系统源码?
建站之星免费模板:自助建站系统与智能响应式一键生成
,如何利用word制作宣传手册?
如何获取上海专业网站定制建站电话?
高防服务器:AI智能防御DDoS攻击与数据安全保障
建站之星后台密码遗忘或太弱?如何重置与强化?
c++ stringstream用法详解_c++字符串与数字转换利器
高端云建站费用究竟需要多少预算?
如何快速生成ASP一键建站模板并优化安全性?
制作网站外包平台,自动化接单网站有哪些?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
魔方云NAT建站如何实现端口转发?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
济南企业网站制作公司,济南社保单位网上缴费步骤?
已有域名能否直接搭建网站?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何快速搭建自助建站会员专属系统?
如何用PHP快速搭建CMS系统?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何在搬瓦工VPS快速搭建网站?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
c++怎么用jemalloc c++替换默认内存分配器【性能】
建站之星展会模版如何一键下载生成?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
香港服务器租用每月最低只需15元?
建站为何优先选择香港服务器?
如何选择服务器才能高效搭建专属网站?
MySQL查询结果复制到新表的方法(更新、插入)
如何撰写建站申请书?关键要点有哪些?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何选择香港主机高效搭建外贸独立站?
实例解析Array和String方法
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何快速查询网站的真实建站时间?
如何在Windows环境下新建FTP站点并设置权限?
jQuery 常见小例汇总
如何快速生成可下载的建站源码工具?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
建站之星后台管理系统如何操作?
如何配置WinSCP新建站点的密钥验证步骤?
建站之星免费版是否永久可用?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
开封网站制作公司,网络用语开封是什么意思?
如何构建满足综合性能需求的优质建站方案?
建站主机选哪种环境更利于SEO优化?
*请认真填写需求信息,我们会在24小时内与您取得联系。