91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Android項目中實現一個底部支付彈窗的方法

發布時間:2020-11-20 17:09:11 來源:億速云 閱讀:189 作者:Leah 欄目:移動開發

在Android項目中實現一個底部支付彈窗的方法?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

Android底部支付彈窗實現的效果:

在Android項目中實現一個底部支付彈窗的方法

實現的思路:

1.通過繼承PopupWindow自定義View來達到彈窗的彈出效果;

2.通過回調將輸入的密碼由彈窗傳入到主界面中;

2.恩,這就夠了——>有些注意點在代碼中備注;

自定義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); //設置彈出窗體動畫效果 
 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監聽判斷獲取觸屏位置如果在選擇框外面則銷毀彈出框 
//   dismiss(); 
   } 
  } 
  return true; 
  } 
 }); 
 
 } 
 
} 

分析:其實很簡單,無法就是通過加載布局將布局裝載至自定義的View中。bottomDialogOnclickListener 是自定義的回調接口,無法就是將值傳遞至主界面中。

主界面代碼:

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(); 
  } 
 }); 
 } 
 
} 

分析:可以看到,主界面的代碼異常簡單,主要是通過自定義一個幫助類來進行彈窗的顯示——>因為彈窗很可能在多個界面使用,所以這種寫法個人還是比較喜歡的。另外通過回調將彈窗對象給傳輸出來,以便在使用的時候根據網絡請求的具體情況來控制彈窗的顯示與取消。

幫助類的代碼:

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); //設置窗口顯示在parent布局的位置并顯示 
 InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);//自動打開軟鍵盤 
 imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
 
 } 

分析:兩點——>1.負載布局文件;2.控制軟鍵盤顯示與關閉;

另外一個很重要的點,花了不少時間才去發現:彈窗彈起的時候,軟鍵盤一般是會覆蓋一部分輸入框的,這是非常不好看的。之所以demo中沒有出現這種情況,是通過了特殊的處理——>將整個彈窗布局外包一層ScrollView,這樣方便軟鍵盤彈起找到輸入框焦點時會將整個布局往上頂。但,這還不夠,一定要在ScrollView中設置一個屬性:

android:fillViewport="true" 

看完上述內容,你們掌握在Android項目中實現一個底部支付彈窗的方法的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潮安县| 北票市| 金乡县| 安乡县| 个旧市| 神农架林区| 清新县| 临城县| 宜黄县| 云龙县| 哈巴河县| 都江堰市| 通榆县| 安多县| 灵台县| 沙河市| 榆树市| 缙云县| 桓台县| 玉环县| 旌德县| 双城市| 翁牛特旗| 铁力市| 阿巴嘎旗| 扎兰屯市| 侯马市| 河西区| 兰州市| 岳普湖县| 奎屯市| 四会市| 苏尼特右旗| 霍州市| 炎陵县| 昌图县| 江陵县| 五峰| 巨野县| 永年县| 丰城市|