十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章將為大家詳細(xì)講解有關(guān)在Android應(yīng)用中怎么利用dialog實(shí)現(xiàn)一個(gè)支付密碼界面彈窗,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
站在用戶的角度思考問題,與客戶深入溝通,找到應(yīng)縣網(wǎng)站設(shè)計(jì)與應(yīng)縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋應(yīng)縣地區(qū)。
實(shí)現(xiàn)過程
1,先寫xml文件:dialog_keyboard.xml
注意事項(xiàng)
(1),密碼部分用的是一個(gè)線性布局中6個(gè)TextView,并設(shè)置android:inputType="numberPassword",
外框是用的一個(gè)有stroke屬性的shape,
(2),1-9數(shù)字是用的recycleview ,每個(gè)item的底部和右邊有1dp的黑線,填充后形成分割線。
(3),recycleview 要設(shè)置屬性 android:overScrollMode="never
不然滑動(dòng)鍵盤的時(shí)候有陰影
(4),底部三個(gè)按鈕用的線性布局里的三個(gè)TextView
2,Java代碼 KeyboardDialog.java
注意事項(xiàng)
(1),封裝成dialog,這段代碼要在setContentView之前 window.requestFeature(Window.FEATURE_NO_TITLE)
(2),在構(gòu)造方法中設(shè)置樣式(后面詳述)
(3),適配器是已封裝的,用原生的也沒差
(4),密碼的存儲(chǔ)和刪除是操作字符串
(5),使用了butterknife 版本為:compile'com.jakewharton:butterknife:7.0.1'
(6),在設(shè)置attributes.width = ScreenUtils.getScreenWidth(context);
使用了封裝的方法 目的是獲取屏幕的寬 可自行百度達(dá)到相同效果
public class KeyboardDialog extends Dialog { private final Context context; private final int money; @Bind(R.id.rv_keyboard)//數(shù)字列表 RecyclerView rvKeyboard; @Bind(R.id.iv_close_key)//關(guān)閉按鈕 ImageView ivCloseKey; @Bind(R.id.tv_tip_money)//提現(xiàn)金額及手續(xù)費(fèi) TextView tvTipMoney; @Bind(R.id.tv_zero)//數(shù)字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;//數(shù)字列表 private String psw = "";//密碼 public KeyboardDialog(Context context, int money) { super(context, R.style.keyboard_dialog); this.context = context; this.money = money;//要提現(xiàn)金額 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 + ""); } //設(shè)置要提現(xiàn)的金額 tvTipMoney.setText("提現(xiàn)金額" + 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 + ""); } }; } /* * 輸入密碼 先判斷現(xiàn)有密碼長度并設(shè)置顯示輸入了密碼 添加密碼到密碼字符串 * 后判斷輸入后密碼的長度 如果等于6則關(guān)閉并請(qǐng)求服務(wù)器 * */ 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 請(qǐng)求服務(wù)器 密碼為 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://關(guān)閉dialog dismiss(); break; case R.id.tv_zero://輸入0 inputNum("0"); break; case R.id.rl_undo://刪除輸入的密碼 deleteNum(); break; } } /* * 刪除密碼 根據(jù)已輸入的密碼長度將對(duì)應(yīng)的textview設(shè)置為空 * 并將密碼字符串最后一位切割掉 * */ 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,設(shè)置彈框樣式
(1),在構(gòu)造方法中設(shè)置樣式 R.style.keyboard_dialog
public KeyboardDialog(Context context, int money) {
super(context, R.style.keyboard_dialog);
this.context = context;
this.money = money;//要提現(xiàn)金額
setCanceledOnTouchOutside(true);
}
樣式代碼為
(2),在onCreate方法中設(shè)置彈框動(dòng)畫樣式
window.setWindowAnimations(R.style.keyboard_dialog_anim);
樣式代碼為
三,調(diào)用
調(diào)用很簡單 一行就可以 需要返回?cái)?shù)據(jù)就需要自行添加了
new KeyboardDialog(this, 1000).show();
關(guān)于在Android應(yīng)用中怎么利用dialog實(shí)現(xiàn)一個(gè)支付密碼界面彈窗就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。