效果
Android Dialog的封装_第1张图片
常规使用:

                Dialog dialog=new Dialog(this,R.style.DialogStyle);                View dilaogView = LayoutInflater.from(this).inflate(                        R.layout.dialog_diylayout, null);                dialog.setContentView(dilaogView);                dialog.show();

如果需要设置dialog的弹出位置,则需要用到Window,通过setGravity来控制dialog位置

        Dialog  dialog = new Dialog(context, R.style.DialogStyle);        Window win = dialog.getWindow();        win.getDecorView().setPadding(0, 0, 0, 0);        WindowManager.LayoutParams lp = win.getAttributes();        // 设置弹出框的宽高        lp.width = WindowManager.LayoutParams.WRAP_CONTENT;        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;        // 设置弹出框的位置        win.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);        win.setAttributes(lp);        win.setContentView(R.layout.dialog_gravity);        dialog.show();

之后就是封装Dialog了

我们把dialog的初始化,findView和设置点击事件都封装在一个类里,在给出一些set方法和接口

import android.app.Dialog;import android.content.Context;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.widget.TextView;import com.diydialog.R;/** * Created by KID on 2018/1/18. */public class DiyDialog {    private Context context;    private Dialog dialog;    private TextView tv_dialog_content;    private TextView tv_cancle;    private TextView tv_ok;    private String content;    private String cancle;    private String ok ;    public DialogClickListener dialogClickListener;    public void setDialogClickListener(DialogClickListener dialogClickListener){        this.dialogClickListener=dialogClickListener;    }    public DiyDialog setContent(String content) {        this.content = content;        return this;    }    public DiyDialog setCancle(String cancle) {        this.cancle = cancle;        return this;    }    public DiyDialog setOk(String ok) {        this.ok = ok;        return this;    }    public DiyDialog(Context context){        this.context=context;    }    public DiyDialog builder(){        View view = LayoutInflater.from(context).inflate(                R.layout.dialog_diylayout, null);        tv_dialog_content= (TextView) view.findViewById(R.id.tv_dialog_content);        tv_cancle= (TextView) view.findViewById(R.id.tv_cancle);        tv_ok= (TextView) view.findViewById(R.id.tv_ok);        if(!TextUtils.isEmpty(content))tv_dialog_content.setText(content);        if(!TextUtils.isEmpty(cancle))tv_cancle.setText(cancle);        if(!TextUtils.isEmpty(ok))tv_ok.setText(ok);        tv_cancle.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if(dialogClickListener!=null)dialogClickListener.cancle();            }        });        tv_ok.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if(dialogClickListener!=null)dialogClickListener.ok();            }        });        dialog = new Dialog(context, R.style.DialogStyle);        dialog.setContentView(view);        return this;    }    public void show() {        if(dialog!=null)dialog.show();    }    public void cancle() {        if(dialog!=null)dialog.cancel();    }    public interface DialogClickListener{        void cancle();        void ok();    }}

使用这个封装dialog的代码

                final DiyDialog diyDialog =new DiyDialog(this);                diyDialog.setCancle("No").setOk("Yes").setContent("Are you kidding me?");                diyDialog.setDialogClickListener(new DiyDialog.DialogClickListener() {                    @Override                    public void cancle() {                        diyDialog.cancle();                    }                    @Override                    public void ok() {                        diyDialog.cancle();                        Toast.makeText(MainActivity.this, "ok哟呵呵呵呵", Toast.LENGTH_SHORT).show();                    }                });                diyDialog.builder().show();

当然你也可以写成一整条链式过去,个人风格问题,比较喜欢分开写。

如果需要弹出动画

win.setWindowAnimations(R.style.mystyle);

    

dialog_enter.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:fromYDelta="100%p"        android:duration="300" />set>

dialog_exit.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:toYDelta="100%p"        android:duration="300" />set>

上面new Dialog的时候传入的 R.style.DialogStyle只是一个样式,非必传。不过建议还是加上,在styles.xml中插入

    -- Dialog的样式 -->    

详细代码链接 http://download.csdn.net/download/qq_31390699/10211790

更多相关文章

  1. Android 自定义Gif动画
  2. android EditText插入字符串到光标所在位置
  3. Android拖动控件改变其位置
  4. Android 9.0 开关机动画流程分析
  5. android 开源动画
  6. Android属性动画-简单实例
  7. Android之Toast自定义动画
  8. android中属性动画 ObjectionAnimation

随机推荐

  1. Android部分控件示例汇总
  2. Android Studio中 Error:Could not find
  3. Android Retrofit W/System.err: java.ne
  4. react native android 调试时图片没有显
  5. 使用ANT进行Android打包
  6. TextView使用Paint设置下划线删除线效果
  7. android读取系统相机及相册图片(亲测可用)
  8. Android:Activity(二):Bundle的作用
  9. [置顶] Android(安卓)多点触摸 multi-tou
  10. Android完美解决多次点击Toast一直提示不