android自定义dialog

前言

在Android开发的过程中经常会遇到自定义Dialog的需求,Android原生的Dialog在很多情况下面并不能满足我们的使用,例如下图钉钉的更新弹窗,所以今天我们就来尝试下自定义Dialog。
钉钉的更新弹窗dialog

自定义Dialog基类

自定义Dialog需要首先继承Dialog,重写onCreate(Bundle savedInstanceState)方法,由于在项目中我们可能不止一次的使用自定义Dialog,所以我创建了一个简单的基类BaseDialog,主要代码如下如下:

@Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //添加布局文件
      setContentView(getLayoutRes());
      //执行初始化view,设置弹窗大小绑定view等
      initView();
      //初始化事件,例如添加点击事件
      initEvent();
  }   

  public abstract int getLayoutRes();

  public abstract void initView();

  public abstract void initEvent();

继承Dialog基类

在具体的使用的时候,需要继承BaseDialog,在initView里面记得添加设置dialog大小的熟悉!!

    override fun initView() {
        //点击空白可以隐藏弹窗
        window?.setBackgroundDrawable(BitmapDrawable())
        setCanceledOnTouchOutside(true)

        //弹窗位置
        window?.setGravity(Gravity.CENTER)

        //设置大小
        val params = window?.attributes // 获取对话框当前的参数值
        params?.height = SysUtils.getScreenDisplay(context).height / 3
        params?.width = SysUtils.getScreenDisplay(context).width

        //设置背景的颜色
        //params.dimAmount = 0.5f;

        //设置属性
        window?.attributes = params
    }

最后

附上完整的BaseDialog的代码

public abstract class BaseDialog extends AppCompatDialog {

    public BaseDialog(@NonNull Context context) {
        super(context);
    }

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(getLayoutRes());

        initView();

        initEvent();
    }

    public abstract int getLayoutRes();

    public abstract void initView();

    public abstract void initEvent();
}
Search by:GoogleBingBaidu