Android實(shí)現(xiàn)底部支付彈窗效果
Android底部支付彈窗實(shí)現(xiàn)的效果:
實(shí)現(xiàn)的思路:
1.通過繼承PopupWindow自定義View來達(dá)到彈窗的彈出效果;
2.通過回調(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)單,無法就是通過加載布局將布局裝載至自定義的View中。bottomDialogOnclickListener 是自定義的回調(diào)接口,無法就是將值傳遞至主界面中。
主界面代碼:
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)單,主要是通過自定義一個(gè)幫助類來進(jìn)行彈窗的顯示——>因?yàn)閺棿昂芸赡茉诙鄠€(gè)界面使用,所以這種寫法個(gè)人還是比較喜歡的。另外通過回調(diào)將彈窗對(duì)象給傳輸出來,以便在使用的時(shí)候根據(jù)網(wǎng)絡(luò)請(qǐng)求的具體情況來控制彈窗的顯示與取消。
幫助類的代碼:
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中沒有出現(xiàn)這種情況,是通過了特殊的處理——>將整個(gè)彈窗布局外包一層ScrollView,這樣方便軟鍵盤彈起找到輸入框焦點(diǎn)時(shí)會(huì)將整個(gè)布局往上頂。但,這還不夠,一定要在ScrollView中設(shè)置一個(gè)屬性:
android:fillViewport="true"
最后,GitHub地址>>https://github.com/ganshenml/BottomDialogApp
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android仿支付寶微信支付密碼界面彈窗封裝dialog
- Android編程實(shí)現(xiàn)的自定義彈窗(PopupWindow)功能示例
- Android監(jiān)聽輸入法彈窗和關(guān)閉的實(shí)現(xiàn)方法
- Android自定義帶增長(zhǎng)動(dòng)畫和點(diǎn)擊彈窗提示效果的柱狀圖DEMO
- Android控件PopupWindow模仿ios底部彈窗
- Android屏幕鎖屏彈窗的正確姿勢(shì)DEMO詳解
- Android程序開發(fā)仿新版QQ鎖屏下彈窗功能
- Android UI設(shè)計(jì)之AlertDialog彈窗控件
- Android仿支付寶支付從底部彈窗效果
- Android實(shí)現(xiàn)底部彈窗效果
相關(guān)文章
Kotlin文件讀寫與SharedPreferences存儲(chǔ)功能實(shí)現(xiàn)方法
SharedPreferences是安卓平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再從SharedPreferences中將值取出2022-12-12Android NDK開發(fā)(C語言基本數(shù)據(jù)類型)
這篇文章主要介紹了Android NDK開發(fā)中,C語言基本數(shù)據(jù)類型,主要以C語言包含的數(shù)據(jù)類型及基本類型展開相關(guān)資料,需要的朋友可以參考一下2021-12-12android串口開發(fā)入門之搭建ndk開發(fā)環(huán)境及第一個(gè)jni調(diào)用程序
這篇文章主要給大家介紹了關(guān)于android串口開發(fā)入門之搭建ndk開發(fā)環(huán)境及第一個(gè)jni調(diào)用程序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01內(nèi)存泄露導(dǎo)致Android?中setVisibility()?失效原理
這篇文章主要介紹了內(nèi)存泄露導(dǎo)致Android?中setVisibility()?失效原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-07-07Android獲取SDcard目錄及創(chuàng)建文件夾的方法
今天小編就為大家分享一篇Android獲取SDcard目錄及創(chuàng)建文件夾的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08Android實(shí)現(xiàn)多點(diǎn)觸控功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)多點(diǎn)觸控功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05android實(shí)現(xiàn)驗(yàn)證碼按鈕
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)驗(yàn)證碼按鈕功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Android框架Volley使用之Post請(qǐng)求實(shí)現(xiàn)方法
這篇文章主要介紹了Android框架Volley使用之Post請(qǐng)求實(shí)現(xiàn)方法,,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05Android如何讓W(xué)ebView中的HTML5頁面實(shí)現(xiàn)視頻全屏播放
最近在工作遇到一個(gè)需求,需要讓W(xué)ebView中的HTML5頁面實(shí)現(xiàn)視頻全屏播放的效果,通過查找相關(guān)的資料終于找到了解決的方法,所以想著分享給大家,所以本文介紹了關(guān)于Android如何讓W(xué)ebView中的HTML5頁面實(shí)現(xiàn)視頻全屏播放的相關(guān)資料,需要的朋友可以參考學(xué)習(xí)。2017-04-04