Android 底部弹出自定义Dialog(支付宝微信选择)

前言

Android 底部弹出自定义Dialog(支付宝微信选择)
之前做过很多 一直没有总结过 这次做一个总结 加深一下记忆
为别人留下一个可参考的方案
不多说 直接上gif效果图

UI希望の效果

1

实际の实现效果Gif

实现

代码总结

首先写一个dialogDemo继承Dialog
需要实现构造方法 选择2参的即可 传一个上下文和一个dialog主题
剩下的就按照流程写

/**
 * @author lyudony
 * @date 2020/8/4.
 * description:支付方式dialog
 */
public class PayTypesDialog extends Dialog {

    private Unbinder mUnbinder;
    @BindView(R.id.iv_pay_type_weixin)
    ImageView mIvWeiChatPay;
    @BindView(R.id.iv_pay_type_zhifubao)
    ImageView mIvZhiFuBaoPay;

    //dialog构造方法 实现时需要传上下文和一个dialog主题
    public PayTypesDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_pay);
        mUnbinder = ButterKnife.bind(this);
        //设置基本属性
        Window dialogWindow = getWindow();
        //设置在底部显示
        dialogWindow.setGravity(Gravity.BOTTOM);
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        //设置宽度和手机持平
        lp.width = AbsListView.LayoutParams.MATCH_PARENT;
        lp.y = 0;//设置Dialog距离底部的距离
        dialogWindow.setAttributes(lp);
    }

    @OnClick({R.id.iv_pay_type_weixin, R.id.iv_pay_type_zhifubao,
     R.id.tv_zhifubao, R.id.tv_weixin, R.id.btn_confirm})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.tv_weixin://选择微信
            case R.id.iv_pay_type_weixin:
                mIvWeiChatPay.setSelected(true);
                mIvZhiFuBaoPay.setSelected(false);
                break;
            case R.id.tv_zhifubao://选择支付宝
            case R.id.iv_pay_type_zhifubao:
                mIvZhiFuBaoPay.setSelected(true);
                mIvWeiChatPay.setSelected(false);
                break;
            case R.id.btn_confirm:
                //选择提现方式
                if (mIvZhiFuBaoPay.isSelected()) {
                    ToastUtils.showShort(getContext(), "选择了支付宝");
                } else if (mIvWeiChatPay.isSelected()) {
                    if (!StringUtils.isWxAppInstalledAndSupported(getContext())) {
                        ToastUtils.showShort(getContext(), "请先安装微信");
                    } else {
                        ToastUtils.showShort(getContext(), "选择了微信 ");
                    }
                }
                break;
        }
    }

}

XML布局参考

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <View
        android:id="@+id/view_bg"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/pay_type_bg"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintDimensionRatio="360:212"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_pay_type"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="提现方式"
        android:textColor="@color/user_setting_font_color"
        android:textSize="16sp"
        app:layout_constraintLeft_toLeftOf="@id/view_bg"
        app:layout_constraintRight_toRightOf="@id/view_bg"
        app:layout_constraintTop_toTopOf="@id/view_bg" />


    <TextView
        android:id="@+id/tv_zhifubao"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:drawableStart="@drawable/zhifubao_touxaing"
        android:drawableLeft="@drawable/zhifubao_touxaing"
        android:drawablePadding="11dp"
        android:gravity="center"
        android:text="@string/ali_pay"
        android:textColor="@color/user_setting_font_color"
        android:textSize="13sp"
        app:layout_constraintBottom_toTopOf="@id/tv_weixin"
        app:layout_constraintLeft_toLeftOf="@id/view_bg"
        app:layout_constraintTop_toBottomOf="@id/tv_pay_type" />

    <TextView
        android:id="@+id/tv_weixin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:drawableStart="@drawable/weixing_touxiagn"
        android:drawableLeft="@drawable/weixing_touxiagn"
        android:drawablePadding="11dp"
        android:gravity="center"
        android:text="@string/we_chat"
        android:textColor="@color/user_setting_font_color"
        android:textSize="13sp"
        app:layout_constraintBottom_toTopOf="@id/btn_confirm"
        app:layout_constraintLeft_toLeftOf="@id/view_bg"
        app:layout_constraintTop_toBottomOf="@id/tv_zhifubao" />

    <ImageView
        android:id="@+id/iv_pay_type_weixin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:foreground="?android:selectableItemBackground"
        android:padding="10dp"
        android:src="@drawable/shopping_cart_selector"
        app:layout_constraintBottom_toBottomOf="@id/tv_weixin"
        app:layout_constraintRight_toRightOf="@id/view_bg"
        app:layout_constraintTop_toTopOf="@id/tv_weixin"
        tools:ignore="ContentDescription,UnusedAttribute" />

    <ImageView
        android:id="@+id/iv_pay_type_zhifubao"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:foreground="?android:selectableItemBackground"
        android:padding="10dp"
        android:src="@drawable/shopping_cart_selector"
        app:layout_constraintBottom_toBottomOf="@id/tv_zhifubao"
        app:layout_constraintRight_toRightOf="@id/view_bg"
        app:layout_constraintTop_toTopOf="@id/tv_zhifubao"
        tools:ignore="ContentDescription,UnusedAttribute" />

    <Button
        android:id="@+id/btn_confirm"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="@dimen/dp_10"
        android:background="@drawable/withdraw_button_bj"
        android:text="@string/confirm"
        android:textColor="@color/whiteColor"
        android:textSize="@dimen/sp_14"
        app:layout_constraintBottom_toBottomOf="@id/view_bg"
        app:layout_constraintDimensionRatio="340:40"
        app:layout_constraintLeft_toLeftOf="@id/view_bg"
        app:layout_constraintRight_toRightOf="@id/view_bg" />

</androidx.constraintlayout.widget.ConstraintLayout>

设置主题style

如果不设置这一步 dialog显示出来就不是和父窗体持平的效果
也不会在父窗体的最下面 我之前就没有设置这个属性 导致一直不是自己想要的效果!

 <style name="pay_type_dialog" parent="android:style/Theme.Dialog">
        <item name="android:windowBackground">@color/whiteColor</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:scrollHorizontally">true</item>
    </style>

使用方法

so easy!!!

  //点击弹出支付方式
  PayTypesDialog payTypesDialog = new PayTypesDialog(this,R.style.pay_type_dialog);
  payTypesDialog.show();

有问题,望多指教!

共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
2

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕氏春秋i

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值