【举例】Android自定义Dialog——做出“确定/取消”的选择

1、自定义Dialog的界面

<--!dialog_yesorno_for_permission.xml-->

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootView"
    android:layout_width="250dp"
    android:layout_height="170dp"
    android:background="@drawable/diabg_bkg"
    android:orientation="vertical"

    >


    <RelativeLayout
        android:id="@+id/top_rl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/bottomo_ll"

        >

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:gravity="center_horizontal|center_vertical"
            android:text="请授予相关权限,否则程序无法运行。\n\n点击确定。\n点击取消。\n"
            android:textColor="@color/black" />

    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@+id/top_rl"
        android:layout_marginBottom="10dp"
        android:background="@color/lightgrey" />


    <RelativeLayout
        android:id="@+id/bottomo_ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"

        android:orientation="horizontal">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/acceptbtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="12dp"
                android:layout_weight="1"
                android:background="@null"
                android:text="确定"
                android:textColor="@color/black"
                android:textSize="18sp" />

            <View
                android:layout_width="1dp"
                android:layout_height="match_parent"
                android:background="@color/lightgrey" />


            <Button
                android:id="@+id/refusebtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="6dp"
                android:layout_marginTop="12dp"
                android:layout_weight="1"
                android:background="@null"
                android:text="取消"
                android:textColor="@color/black"
                android:textSize="18sp" />

        </LinearLayout>
    </RelativeLayout>

</RelativeLayout>

2. Dialog的形状背景等设置

<--!diabg_bkg.xml-->

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/white" />
    <corners android:radius="16dp" />

</shape>

3.关于该Dialog的Java类文件


import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;


public class YesOrNoDialog extends Dialog {
    private Button positiveButton, negativeButton;
    private TextView message;
    private YesOrNoDialogCallback callback;

    //定义“确定/取消”的操作
    public enum ClickedButton {POSITIVE, NEGATIVE}

    public YesOrNoDialog(Context context) {
        super(context, R.style.Dialog_Dim);
        setCustomDialog();
        getWindow().setLayout((int) (AppConstant.SCRRENWIDTH * 0.7), (int) (AppConstant.SCREENHEIGHT * 0.3));
    }

    public void setCallback(YesOrNoDialogCallback callback) {
        this.callback = callback;
    }

    //具体的设置Dialog
    private void setCustomDialog() {
        View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_yesorno_for_permission, null);
        message = (TextView) mView.findViewById(R.id.title);
        positiveButton = (Button) mView.findViewById(R.id.acceptbtn);
        negativeButton = (Button) mView.findViewById(R.id.refusebtn);
        positiveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callback.onClickButton(ClickedButton.POSITIVE,"");
            }
        });
        negativeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callback.onClickButton(ClickedButton.NEGATIVE,"");
            }
        });

        //ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        super.setContentView(mView);
    }

    @Override
    public void setContentView(int layoutResID) {
    }

    @Override
    public void setContentView(View view, ViewGroup.LayoutParams params) {
    }

    @Override
    public void setContentView(View view) {
    }


    public void setMeesage(String mes) {
        message.setText(mes);
    }

    //定义回调的接口
    public interface YesOrNoDialogCallback {
        public void onClickButton(ClickedButton button,String message);
    }

}

4.使用Dialog

        YesOrNoDialog ynDialog = new YesOrNoDialog(mContext);

        ynDialog.setMeesage("请授予相关权限,否则程序无法运行。\n\n点击确定,重新授予权限。\n点击取消,立即终止程序。\n");
        ynDialog.setCallback(new YesOrNoDialog.YesOrNoDialogCallback() {
            @Override
            public void onClickButton(YesOrNoDialog.ClickedButton button, String message) {
                if (button == YesOrNoDialog.ClickedButton.POSITIVE) {
                    ynDialog.dismiss();
                    ....
                    //balabala

                } else if (button == YesOrNoDialog.ClickedButton.NEGATIVE) {
                    ynDialog.dismiss();
                    ....
                    //balabala
                }
            }
        });

        //显示该Dialog,不要忘记
        dialog.show();

抓住Demo一只:

为了方便以后调用,本人已经将上述Dialog封装到了.aar文件中。以后调用时,只需要导入第三方包即可。

https://github.com/shanxu100/GUtils

欢迎大家补充交流。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值