Android实现底部支付弹窗效果

所属分类: 软件编程 / Android 阅读数: 34
收藏 0 赞 0 分享

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

android byte[] 和short[]转换的方法代码

这篇文章主要介绍了android byte[] 和short[]转换的方法代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取应用程序大小的方法

这篇文章主要介绍了Android获取应用程序大小的方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取其他包的Context实例代码

这篇文章主要介绍了Android获取其他包的Context实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android放大镜的实现代码

这篇文章主要介绍了Android放大镜的实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android 读取Properties配置文件的小例子

这篇文章主要介绍了Android 读取Properties配置文件的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android通讯录开发之删除功能的实现方法

这篇文章主要介绍了Android通讯录开发之删除功能的实现方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享
查看更多