Android 自定义Dialog

dialog.xml布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="295dp"
    android:layout_height="wrap_content"
    android:background="@drawable/end_dialog"
    tools:ignore="MissingDefaultResource">


    <ImageView
        android:id="@+id/no"
        android:layout_width="@dimen/dp20"
        android:layout_height="@dimen/dp20"
        android:layout_alignParentRight="true"
        android:background="@drawable/ic_dialog_end" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/dp33"
            android:layout_marginTop="@dimen/dp60"
            android:layout_marginRight="@dimen/dp33"
            android:text="@string/prompt12"
            android:textColor="@color/white"
            android:textSize="@dimen/sp18" />

        <android.widget.Button
            android:id="@+id/yes"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp40"
            android:layout_marginLeft="@dimen/dp62"
            android:layout_marginTop="43dp"
            android:layout_marginRight="@dimen/dp62"
            android:layout_marginBottom="@dimen/dp40"
            android:background="@drawable/shape_btn_red2_rectangle_corner_bg"
            android:text="@string/i_know"
            android:textAllCaps="false"
            android:textColor="@color/white" />
    </LinearLayout>

</RelativeLayout>

UpdateDialogs自定义弹框代码

public class UpdateDialogs extends Dialog {
    private Button yes;//确定按钮
    private ImageView no;//取消按钮
    private TextView mTvContent;
    boolean touchOutside;


    private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器
    private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器
    public UpdateDialogs(@NonNull Context context) {
        super(context);
    }

    public UpdateDialogs(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    protected UpdateDialogs(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog);
        initView();
    }


    /**
     * 空方法,按下返回键时就不会关闭对话框
     */
    @Override
    public void onBackPressed() {}

    /**
     * 初始化界面控件
     */
    private void initView() {
        yes = findViewById(R.id.yes);
        no = findViewById(R.id.no);
        mTvContent = findViewById(R.id.tv_content);

        //设置取消按钮被点击后,向外界提供监听
        no.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (noOnclickListener != null) {
                    noOnclickListener.onNoClick();
                }
            }
        });
        yes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (yesOnclickListener != null) {
                    yesOnclickListener.onYesOnclick();
                }
            }
        });
    }

    /**
     * 设置不可消失
     * @param touchOutside false不可关闭
     */
    public void setNotDisappear(boolean touchOutside){
        this.touchOutside=touchOutside;
        this.setCanceledOnTouchOutside(touchOutside);// false 禁止通过触摸对话框外部来关闭对话框
        no.setVisibility(View.GONE);//隐藏关闭按钮
    }

    /**
     * 设置文本内容
     * @param content
     */
    public void setContent(String content){
        mTvContent.setText(content);
    }

    public void setButtonText(String content){
        yes.setText(content);
    }

    /**
     * 设置取消按钮的显示内容和监听
     *
     * @param str
     * @param onNoOnclickListener
     */
    public void setNoOnclickListener( onNoOnclickListener onNoOnclickListener) {
        this.noOnclickListener = onNoOnclickListener;
    }


    /**
     * 设置确定按钮的显示内容和监听
     *
     * @param str
     * @param yesOnclickListener
     */
    public void setYesOnclickListener( onYesOnclickListener yesOnclickListener) {
        this.yesOnclickListener = yesOnclickListener;
    }

    public interface onNoOnclickListener {
        public void onNoClick();
    }

    public interface onYesOnclickListener {
        public void onYesOnclick( );
    }

}

style.xml 设置弹框主题

<!--自定义Dialog背景全透明无边框theme-->
    <style name="MyDialog" parent="android:style/Theme.Dialog">
        <!--背景颜色和透明程度-->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--是否去除标题-->
        <item name="android:windowNoTitle">true</item>
        <!--是否去除边框-->
        <item name="android:windowFrame">@null</item>
        <!--是否浮现在activity之上-->
        <item name="android:windowIsFloating">true</item>
        <!--是否模糊-->
        <item name="android:backgroundDimEnabled">true</item>
    </style>

显示弹框

UpdateDialogs updateDialogs= new UpdateDialogs(this, R.style.MyDialog);
updateDialogs.show();
updateDialogs.setTitle(content);
updateDialogs.setYesOnclickListener(() -> {
    updateDialogs.hide();
           
});
updateDialogs.setNoOnclickListener(() -> {
    updateDialogs.hide();
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值