【总结】Dialog的使用(Android)

摘要:本文主要介绍自定义Dialog中遇到几个技术点,(1)自定义布局;(2)回调函数;(3)点击空白消失


一、自定义布局文件

(1)跟写任何Activity一样,首先自己写一个完整的XML布局文件;

(2)声明一个MyDialog类,继承Dialog,实现View.OnClickListener接口;

(3)以下是MyDialog类中的核心代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置无标题
        setCancelable(false); // 设置返回键或点击其他地方,弹窗不会消失
        initView(); // 初始化UI
    }

private void initView() {
        View view = LayoutInflater.from(context).inflate(R.layout.dialog); // 加载布局文件
        setContentView(view);

        // 在此初始化各种组件
        mImg = (ImageView) view.findViewById(R.id.img);
        mImg.setOnClickListener(this);
        mBtn = (TextView) view.findViewById(R.id.txt);
        mBtn.setOnClickListener(this); // 确认按钮,添加回调函数时要用

        // 设置弹窗的大小,位置等
        Window window = getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        DisplayMetrics d = getResources().getDisplayMetrics(); // 获取屏幕宽、高
        lp.width = (int) (d.widthPixels * 0.8); // 宽度设置为屏幕的0.8
        lp.gravity = Gravity.CENTER;
        window.setAttributes(lp);
        window.setBackgroundDrawableResource(android.R.color.transparent); // 解决使用圆角时,但存在四个黑角的问题,需要Dialog的background属性为圆角属性,也能横向填充屏幕
    }
(4)经过以上代码,MyDialog终于有了自定义的布局文件了,可以肆意进行任何修改


二、添加回调函数

开发中经常遇到,可以有回调函数的情况,其中包含几个参数,很方便,以下是代码实现

(1)首先,在MyDialog中自定义一个接口,定好方法,参数等

    private OnConfirmListener mListener; // 局部变量,调用的就是它
    public interface OnConfirmListener { // 定好接口结构
        void onFinished(String name, int age);
    }
(2)添加回调接口到单击事件中(实现View.OnClickListener接口)

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.txt: // 确认按钮
                if (mListener != null) { // 调起接口变量的方法
                        mListener.onFinished("任意字符串", 10);
                }
                break;
            default:
                break;
        }
    }
(3)添加外界调用的方法,实例化mListener变量

  public void show(OnConfirmListener listener) {
        this.mListener = listener;
        super.show();
    }

(4)外部调用情况如下:

    mDialog.show(new MyDialog.OnConfirmListener() {
        @Override
        public void onFinished(String name, int age) {
          // 根据回调的参数,添加其他业务逻辑
    });

到此,就能够实现了自定义Dialog弹窗的界面,并实现回调函数了

三、点击空白消失

setCanceledOnTouchOutside(true);






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值