本文的代码来自:http://blog.csdn.net/oqihaogongyuan/article/details/50958659

首先看下自定义的效果,圆角对话框、悬浮在界面上、背景变灰色:

Android自定义dialog对话框悬浮在界面上_第1张图片

第一步:values/styles/ 文件夹下新加DIalog主题风格,在这里设置背景色等:

    

第二步:layout/ 文件夹下就是我们dialog的自定义View布局文件了:

<?xml version="1.0" encoding="utf-8"?>                                                

第三步:drawable/ 文件夹下新建free_dialog_bg.xml,就是自定义Dialog的背景颜色设置了:

<?xml version="1.0" encoding="utf-8"?>                

第四步:自定义Dialog,里面其实没啥就是界面上的元素、点击事件的设置:

public class SelfDialog extends Dialog {    private Button yes;//确定按钮    private Button no;//取消按钮    private TextView titleTv;//消息标题文本    private TextView messageTv;//消息提示文本    private String titleStr;//从外界设置的title文本    private String messageStr;//从外界设置的消息文本    //确定文本和取消文本的显示内容    private String yesStr, noStr;    private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器    private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器    /**     * 设置取消按钮的显示内容和监听     *     * @param str     * @param onNoOnclickListener     */    public void setNoOnclickListener(String str, onNoOnclickListener onNoOnclickListener) {        if (str != null) {            noStr = str;        }        this.noOnclickListener = onNoOnclickListener;    }    /**     * 设置确定按钮的显示内容和监听     *     * @param str     * @param onYesOnclickListener     */    public void setYesOnclickListener(String str, onYesOnclickListener onYesOnclickListener) {        if (str != null) {            yesStr = str;        }        this.yesOnclickListener = onYesOnclickListener;    }    public SelfDialog(Context context) {        super(context, R.style.MyDialog);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.free_exercise_sure_dialog_layout);        //按空白处不能取消动画        setCanceledOnTouchOutside(false);        //初始化界面控件        initView();        //初始化界面数据        initData();        //初始化界面控件的事件        initEvent();    }    /**     * 初始化界面的确定和取消监听器     */    private void initEvent() {        //设置确定按钮被点击后,向外界提供监听        yes.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (yesOnclickListener != null) {                    yesOnclickListener.onYesClick();                }            }        });        //设置取消按钮被点击后,向外界提供监听        no.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (noOnclickListener != null) {                    noOnclickListener.onNoClick();                }            }        });    }    /**     * 初始化界面控件的显示数据     */    private void initData() {        //如果用户自定了title和message        if (titleStr != null) {            titleTv.setText(titleStr);        }        if (messageStr != null) {            messageTv.setText(messageStr);        }        //如果设置按钮的文字        if (yesStr != null) {            yes.setText(yesStr);        }        if (noStr != null) {            no.setText(noStr);        }    }    /**     * 初始化界面控件     */    private void initView() {        yes = (Button) findViewById(R.id.yes);        no = (Button) findViewById(R.id.no);        titleTv = (TextView) findViewById(R.id.title);        messageTv = (TextView) findViewById(R.id.message);    }    /**     * 从外界Activity为Dialog设置标题     *     * @param title     */    public void setTitle(String title) {        titleStr = title;    }    /**     * 从外界Activity为Dialog设置dialog的message     *     * @param message     */    public void setMessage(String message) {        messageStr = message;    }    /**     * 设置确定按钮和取消被点击的接口     */    public interface onYesOnclickListener {        public void onYesClick();    }    public interface onNoOnclickListener {        public void onNoClick();    }}

第五步:使用上面我们定制的Dialog了:

public class MainActivity extends AppCompatActivity {    private SelfDialog selfDialog;    private TextView txt;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        txt = (TextView) findViewById(R.id.txt);        txt.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                selfDialog = new SelfDialog(MainActivity.this);                selfDialog.setTitle("提示");                selfDialog.setMessage("确定退出应用?");                selfDialog.setYesOnclickListener("确定", new SelfDialog.onYesOnclickListener() {                    @Override                    public void onYesClick() {                        Toast.makeText(MainActivity.this,"点击了--确定--按钮",Toast.LENGTH_LONG).show();                        selfDialog.dismiss();                    }                });                selfDialog.setNoOnclickListener("取消", new SelfDialog.onNoOnclickListener() {                    @Override                    public void onNoClick() {                        Toast.makeText(MainActivity.this,"点击了--取消--按钮",Toast.LENGTH_LONG).show();                        selfDialog.dismiss();                    }                });                selfDialog.show();            }        });    }}

项目代码已经上传:https://github.com/buder-cp/base_component_learn/tree/master/dialog_learn

 

更多相关文章

  1. Android学习之界面篇(一)Android Animation简单介绍
  2. android 按钮 的状态
  3. Android 关闭虚拟按钮、底部导航条
  4. 开源项目之Android GreenDroid(界面库)
  5. Android圆角按钮的制作方法
  6. 【Android】进入应用和切换界面时闪屏的问题
  7. 由 Sense 4.0 说开去: Android 第三方定制界面还有必要吗?

随机推荐

  1. Android(安卓)opengl ES实现后台绘图并保
  2. Android(安卓)Camera增加自定义图像处理
  3. USB Camera在android车机上应用前景及初
  4. 深入理解 Android(安卓)消息机制原理
  5. 三分钟搞定安卓+iOS适配问题
  6. 【总结问题】在Eclipse中安装ADT(Android
  7. android 自定义Toast样式和显示方式
  8. Android启动service下载失败后stopServic
  9. Android(安卓)QQ第三方登录 分享
  10. 微软Office应用将于明年3月登陆iOS与Andr