Android实现底部支付弹窗效果

 更新时间:2017年01月25日 09:09:06   作者:ganshenml  
这篇文章主要为大家详细介绍了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

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

相关文章

  • Android ScreenLockReceiver监听锁屏功能示例

    Android ScreenLockReceiver监听锁屏功能示例

    这篇文章主要介绍了Android ScreenLockReceiver监听锁屏功能,结合实例形式分析了Android监听锁屏及取消监听功能的具体实现技巧,需要的朋友可以参考下
    2017-07-07
  • Android自定义ViewGroup实现淘宝商品详情页

    Android自定义ViewGroup实现淘宝商品详情页

    这篇文章主要为大家详细介绍了Android自定义ViewGroup实现淘宝商品详情页,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Android自定义View倒计时圆

    Android自定义View倒计时圆

    这篇文章主要为大家详细介绍了Android自定义View倒计时圆,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android判断网络类型的方法(2g,3g还是wifi)

    Android判断网络类型的方法(2g,3g还是wifi)

    这篇文章主要介绍了Android判断网络类型的方法,可实现判断2g,3g还是wifi的功能,结合实例形式分析了Android针对网络类型的相关判定技巧,需要的朋友可以参考下
    2016-02-02
  • Kotlin使用flow实现倒计时功能(示例详解)

    Kotlin使用flow实现倒计时功能(示例详解)

    这篇文章主要介绍了Kotlin使用flow实现倒计时功能,本文通过图文实例相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • android shape实现阴影或模糊边效果

    android shape实现阴影或模糊边效果

    这篇文章主要介绍了android shape实现阴影或模糊边效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Android中通过反射实现圆角ImageView代码实例

    Android中通过反射实现圆角ImageView代码实例

    这篇文章主要介绍了Android中通过反射实现圆角ImageView代码实例,本文直接给出核心实现代码,需要的朋友可以参考下
    2015-04-04
  • Android中init.rc文件的解析 分享

    Android中init.rc文件的解析 分享

    本文分析Android中如何解析init.rc文件,重点描述了on action内的解析,并从解析的过程中总结出init.rc的语法规范。
    2013-06-06
  • 详解Android自定义View--自定义柱状图

    详解Android自定义View--自定义柱状图

    这篇文章主要介绍了详解Android自定义View--自定义柱状图,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 深入了解OkHttp3之Interceptors

    深入了解OkHttp3之Interceptors

    这篇文章主要介绍了深入了解OkHttp3之Interceptors,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论