在Android項(xiàng)目中實(shí)現(xiàn)一個(gè)底部支付彈窗的方法?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
10多年的鳳泉網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整鳳泉建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“鳳泉網(wǎng)站設(shè)計(jì)”,“鳳泉網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
Android底部支付彈窗實(shí)現(xiàn)的效果:
實(shí)現(xiàn)的思路:
1.通過(guò)繼承PopupWindow自定義View來(lái)達(dá)到彈窗的彈出效果;
2.通過(guò)回調(diào)將輸入的密碼由彈窗傳入到主界面中;
2.恩,這就夠了——>有些注意點(diǎn)在代碼中備注;
自定義View的代碼:
public class BottomDialogView extends PopupWindow { private View dialogView; private EditText payPassEt; private Button cancelBtn, confirmBtn; private ImageView backDialogIv; public BottomDialogView(Activity context, final BottomDialogOnclickListener bottomDialogOnclickListener) { super(context); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); dialogView = inflater.inflate(R.layout.dialog, null); backDialogIv = (ImageView) dialogView.findViewById(R.id.backDialogIv); payPassEt = (EditText) dialogView.findViewById(R.id.payPassEt); cancelBtn = (Button) dialogView.findViewById(R.id.cancelBtn); confirmBtn = (Button) dialogView.findViewById(R.id.confirmBtn); backDialogIv.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { dismiss(); } }); cancelBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { dismiss(); } }); confirmBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { bottomDialogOnclickListener.onPositiveClick(payPassEt.getText().toString().trim(), BottomDialogView.this); } }); this.setContentView(dialogView); this.setWidth(LayoutParams.MATCH_PARENT); this.setHeight(LayoutParams.MATCH_PARENT); this.setFocusable(true); this.setAnimationStyle(R.style.DialogShowStyle); //設(shè)置彈出窗體動(dòng)畫效果 ColorDrawable dw = new ColorDrawable(0xb0000000); this.setBackgroundDrawable(dw); dialogView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { int height = dialogView.findViewById(R.id.pop_layout).getTop(); int y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_UP) { if (y < height) { //添加OnTouchListener監(jiān)聽判斷獲取觸屏位置如果在選擇框外面則銷毀彈出框 // dismiss(); } } return true; } }); } }
分析:其實(shí)很簡(jiǎn)單,無(wú)法就是通過(guò)加載布局將布局裝載至自定義的View中。bottomDialogOnclickListener 是自定義的回調(diào)接口,無(wú)法就是將值傳遞至主界面中。
主界面代碼:
public class ShowBottomDialogAct extends AppCompatActivity { private Button showBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_bottom_dialog); showBtn = (Button) findViewById(R.id.showBtn); showBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showDialog(); } }); } private void showDialog() { DialogUtil.showBottomDialog(ShowBottomDialogAct.this, R.id.activity_show_bottom_dialog, new BottomDialogOnclickListener() { @Override public void onPositiveClick(String contentStr, BottomDialogView dialogView) { dialogView.dismiss(); } }); } }
分析:可以看到,主界面的代碼異常簡(jiǎn)單,主要是通過(guò)自定義一個(gè)幫助類來(lái)進(jìn)行彈窗的顯示——>因?yàn)閺棿昂芸赡茉诙鄠€(gè)界面使用,所以這種寫法個(gè)人還是比較喜歡的。另外通過(guò)回調(diào)將彈窗對(duì)象給傳輸出來(lái),以便在使用的時(shí)候根據(jù)網(wǎng)絡(luò)請(qǐng)求的具體情況來(lái)控制彈窗的顯示與取消。
幫助類的代碼:
public static void showBottomDialog(Activity activity , int dialogLayoutId , BottomDialogOnclickListener bottomDialogOnclickListener){ BottomDialogView bottomDialogView = new BottomDialogView(activity, bottomDialogOnclickListener); bottomDialogView.showAtLocation(activity.findViewById(dialogLayoutId), Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); //設(shè)置窗口顯示在parent布局的位置并顯示 InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);//自動(dòng)打開軟鍵盤 imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); }
分析:兩點(diǎn)——>1.負(fù)載布局文件;2.控制軟鍵盤顯示與關(guān)閉;
另外一個(gè)很重要的點(diǎn),花了不少時(shí)間才去發(fā)現(xiàn):彈窗彈起的時(shí)候,軟鍵盤一般是會(huì)覆蓋一部分輸入框的,這是非常不好看的。之所以demo中沒(méi)有出現(xiàn)這種情況,是通過(guò)了特殊的處理——>將整個(gè)彈窗布局外包一層ScrollView,這樣方便軟鍵盤彈起找到輸入框焦點(diǎn)時(shí)會(huì)將整個(gè)布局往上頂。但,這還不夠,一定要在ScrollView中設(shè)置一個(gè)屬性:
android:fillViewport="true"
看完上述內(nèi)容,你們掌握在Android項(xiàng)目中實(shí)現(xiàn)一個(gè)底部支付彈窗的方法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當(dāng)前文章:在Android項(xiàng)目中實(shí)現(xiàn)一個(gè)底部支付彈窗的方法
轉(zhuǎn)載注明:http://chinadenli.net/article46/gisgeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、ChatGPT、網(wǎng)站策劃、App設(shè)計(jì)、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)