十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章将为大家详细讲解有关在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
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);
使用了封装的方法 目的是获取屏幕的宽 可自行百度达到相同效果
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 ArrayListkeyboardList;//数字列表 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 (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; } } }
3,设置弹框样式
(1),在构造方法中设置样式 R.style.keyboard_dialog
public KeyboardDialog(Context context, int money) {
super(context, R.style.keyboard_dialog);
this.context = context;
this.money = money;//要提现金额
setCanceledOnTouchOutside(true);
}
样式代码为
(2),在onCreate方法中设置弹框动画样式
window.setWindowAnimations(R.style.keyboard_dialog_anim);
样式代码为
三,调用
调用很简单 一行就可以 需要返回数据就需要自行添加了
new KeyboardDialog(this, 1000).show();
关于在Android应用中怎么利用dialog实现一个支付密码界面弹窗就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。