Android实现底部支付弹窗效果
作者:ganshenml 发布时间:2022-06-12 13:39:43
标签: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"
最后,GitHub地址>>https://github.com/ganshenml/BottomDialogApp


猜你喜欢
- 一、ehcahe的介绍EhCache 是一个纯Java的进程内缓存框架,具有高速、精干等特点,是Hibernate中默认的CacheProv
- 前言日常的Android开发中,我们会用到IntentFilter的匹配规则。IntentFilter的主要规则分为action、categ
- 本文实例讲述了java设计模式之工厂模式。分享给大家供大家参考,具体如下:工厂模式(factory)涉及到4个角色:抽象工厂类角色,具体工厂
- 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到有那种下拉式的二级列表菜单。具体如图所示:上面两张图就是美团的一个二级
- 一、线程的生命周期1.五种状态:新建状态、就绪状态、运行状态、阻塞状态、消亡状态2.就绪状态的线程表示有权利去获取CPU的时间片,CPU时间
- 兄dei,耐心把我的写的看完,我写的不繁琐,很好理解.IDEA插件之Mybatis Log plugin
- 文件移动是计算机资源管理常用的一个操作,这在操作系统中可以通过文件的剪切与复制或鼠标拖动来实现。但是在Java文件的编程实现中,大多是通过复
- 测试springboot项目出现Test Ignored今天在写springBoot项目运行测试类时出现了以下问题:Test ignored
- 前言真的一秒就可以实现么?是的,因为我们直接复制粘贴工具类拿来用就可以。 工具类 WaterMarkUtil.java&
- 本文实现了C#隐式运行CMD命令的功能。下图是实例程序的主画面。在命令文本框输入DOS命令,点击“Run”按钮,在下面的文本框中输出运行结果
- 一、安装ElasticsearchElasticsearch下载地址:http://www.elasticsearch.org/downlo
- 首先在layout布局中设置按钮和一个ImageView<Button android:id="@+id/sel
- 一、构造方法类的构造方法是类的成员方法的一种,它的作用是对类中的成员进行初始化操作。类的构造方法分为:
- 在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守
- 本文实例讲述了Winform实现调用asp.net数据接口的方法,分享给大家供大家参考。具体实现方法如下:一、问题:最近一个WPF项目需要改
- 一、Application是什么?Application类在每一次开发当中是我们都会遇到的,每一个APP都会有一个Application实例
- 过早提升(Premature Promotion)提升速率(promotion rate), 用于衡量单位时间内从年轻代提升到老年代的数据量
- 本文实例为大家分享了Java swing 仿QQ账号密码输入框,供大家参考,具体内容如下主要思路是自己定义 AccountPanel 和 P
- 第一步:引入jar包 <dependency> <gro
- 前言安卓6.0之后,一些敏感权限需要进行动态请求,虽说编写请求授权代码并不难,但是每次一需要权限就需要在视图中添加一段代码,严重影响代码美观