用Dialog实现底部弹窗
来源:互联网 发布:威海志成网络 编辑:程序博客网 时间:2024/06/18 04:31
有时要实现各种各样的弹窗,譬如选择支付方式的时候,很多APP就会选择由底部弹上来的。如图:
下面是Dialog的实现:
public class ChoosePayStatusDialog extends Dialog { private LinearLayout aliPayLly; private LinearLayout weixinPayLly; public ChoosePayStatusDialog(@NonNull Context context) { super(context, R.style.BottomDialog);//关键代码 setContentView(R.layout.dialog_choose_pay);//关键代码 setCancelable(true);//关键代码 setCanceledOnTouchOutside(true);//关键代码 getWindow().setGravity(Gravity.BOTTOM);//关键代码 getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); aliPayLly= (LinearLayout) findViewById(R.id.aliPayLly); weixinPayLly= (LinearLayout) findViewById(R.id.weixinPayLly); aliPayLly.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EventBus.getDefault().post(new ChoosePayBean(2)); dismiss(); } }); weixinPayLly.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EventBus.getDefault().post(new ChoosePayBean(1)); dismiss(); } }); } @Override public boolean onTouchEvent(MotionEvent event) { /* 触摸外部弹窗 */ if (isOutOfBounds(getContext(), event)) { EventBus.getDefault().post(new ChoosePayBean()); dismiss(); } return super.onTouchEvent(event); } private boolean isOutOfBounds(Context context, MotionEvent event) { final int x = (int) event.getX(); final int y = (int) event.getY(); final int slop = ViewConfiguration.get(context).getScaledWindowTouchSlop(); final View decorView = getWindow().getDecorView(); return (x < -slop) || (y < -slop) || (x > (decorView.getWidth() + slop)) || (y > (decorView.getHeight() + slop)); }}
以上代码中:
getWindow().setGravity(Gravity.BOTTOM);
设置对话框的位置,这里设置成底部,也可以设置成Gravity.CENTER,根据需求而定。
super(context, R.style.BottomDialog);
BottomDialog样式文件代码如下:
<style name="BottomDialog"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowIsFloating">false</item> <item name="android:windowAnimationStyle">@style/DialogAnimation</item> <item name="android:gravity">bottom</item> </style>
@style/DialogAnimation中是定义对话框出现与消失的动画,文件内容如下:
<style name="DialogAnimation"> <item name="android:windowEnterAnimation">@anim/slide_up</item> <item name="android:windowExitAnimation">@anim/slide_down</item> </style>
@anim/slide_up内容如下:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillBefore="true" android:fillEnabled="true" android:interpolator="@anim/anim_interpolator" android:shareInterpolator="true" android:zAdjustment="top"> <translate android:duration="500" android:fromYDelta="100%p" android:toYDelta="0%p" /></set>
@anim/slide_down内容如下:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator" android:shareInterpolator="true"> <translate android:duration="500" android:fromYDelta="0.0%p" android:toYDelta="100.0%p" /></set>
重写onTouchEvent方法和isOutOfBounds是为了监听点击对话框阴影部分,可以根据实际需求来定,关于这部分的博客地址为:《关于给Dialog设置setCanceledOnTouchOutside(true)后如何监听Dialog消失》
阅读全文
0 0
- 用Dialog实现底部弹窗
- Android Dialog底部弹窗
- 底部dialog通用弹窗
- Dialog 实现底部弹出菜单
- Android之dialog实现底部出现对话框
- 自定义 DialogFragment 实现底部弹出 dialog
- Android 实现屏幕底部弹出Dialog
- Android底部弹窗实现
- 用PopupWindow,Activity以及Dialog不同方式实现从底部弹出对话框
- android Dialog弹在底部核心代码
- Android 控件——利用Dialog实现底部弹出对话框
- Android实现从底部弹出的Dialog(一)
- Android实现从底部弹出的Dialog(二)
- 自定义Dialog实现全屏和位置在屏幕底部
- Android底部dialog的几种实现方式
- android dialog实现底部弹出和手指滑动隐藏效果
- Android 控件——利用Dialog实现底部弹出对话框
- Android底部对话框的实现(BottomSheet,自定义Dialog)
- MediaStore.Audio.Media属性(本地媒体库)
- Android常用开源项目(二十八)
- nginx配合modsecurity实现WAF功能
- 实现View的简单滑动2
- HDU 4794 斐波那契数列循环节
- 用Dialog实现底部弹窗
- 史上最全SSM框架整合(三)-----SSM框架的整合
- 守护进程
- 占位。。。。。。。。。。。。。
- iptables: No chain/target/match by that name.
- 海思 3536C音频调试
- 《Java编程思想》学习笔记2——对象初始化和面向对象特性
- aliyun阿里云Maven仓库地址——加速你的maven构建
- Django安装mysql-python驱动系列之八