目录

AlertDialog默认样式 

单选样式的AlertDialog:

AlertDialog多选样式:

AlertDialog自定义样式:

自定义Dialog:


Demo地址:https://github.com/zGuangYuan/Androidstudio_example    


Alertlog简介:Alertlog可以在当前的界面弹出一个对话框,而且这个对话框是至于所有颜色之上,能够屏蔽其他的控件的显示,Alertlog一般用于提示一些重要的内容或者信息。


  • 默认样式

  • 单选样式

  • 多选样式

  • 自定义样式

  • 自定义Dialog


AlertDialog默认样式 

例子:

新建一个包,名为:Alertdialog

在Alertdialog这个包里新建一个Empty Activity,命名为:DiaglogActivity.

在默认的Activity(MainActivity)设置一个按钮可以跳转到DiaglogActivity中,并为这个按钮绑定监听器:

在布局文件添加一个控件

在MainActivity获取控件对象,绑定监听器:

整体代码,出了这个按钮,别的可以不用管:

package com.example.yuan.e06_gridview;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import com.example.yuan.e06_gridview.Alertdialog.DiaglogActivity;import com.example.yuan.e06_gridview.GridView.GridViewActivity;import com.example.yuan.e06_gridview.ListView.ListViewActivity;import com.example.yuan.e05_listview.R;import com.example.yuan.e06_gridview.RecycleView.RecycleViewActivity;import com.example.yuan.e06_gridview.Toast.ToastActivity;import com.example.yuan.e06_gridview.WebView.WebViewActivity;public class MainActivity extends AppCompatActivity {    //声明引用    private Button mIVButton;    private Button mLVButton;    private Button mGVButton;    private Button mRVButton;    private Button mWVButton;    private Button mToastButton,mDiaglogButton;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取控件对象        mIVButton=(Button) findViewById(R.id.IVButton_Id);        mLVButton=(Button) findViewById(R.id.LVButton_Id);        mGVButton=(Button) findViewById(R.id.GVButton_Id);        mRVButton=(Button) findViewById(R.id.RVButton_Id);        mWVButton=(Button) findViewById(R.id.WVButton_Id);        mToastButton=(Button)findViewById(R.id.ToastButton_Id);        mDiaglogButton=(Button) findViewById(R.id.DiaglogButton_Id);        setlistener();    }    //设置监听器    public void setlistener(){        ButtonClickListener listener =new ButtonClickListener();        mLVButton.setOnClickListener(listener);        mIVButton.setOnClickListener(listener);        mGVButton.setOnClickListener(listener);        mRVButton.setOnClickListener(listener);        mWVButton.setOnClickListener(listener);        mToastButton.setOnClickListener(listener);        mDiaglogButton.setOnClickListener(listener);    }    //实现监听器接口    class ButtonClickListener implements OnClickListener{        @Override        public void onClick(View v) {            Intent intent = null;            switch (v.getId()){                case R.id.ToastButton_Id:                    intent = new Intent(MainActivity.this, ToastActivity.class);                    break;                case R.id.GVButton_Id:                    intent=new Intent(MainActivity.this, GridViewActivity.class);                    break;                case R.id.IVButton_Id:                    intent = new Intent(MainActivity.this,ImageViewActivity.class);                    break;                case R.id.LVButton_Id:                    intent =new Intent(MainActivity.this, ListViewActivity.class);                    break;                case R.id.RVButton_Id:                    intent = new Intent(MainActivity.this, RecycleViewActivity.class);                    break;                case R.id.WVButton_Id:                    intent =new Intent(MainActivity.this, WebViewActivity.class);                    break;                    //跳转到Diaglog演示界面                case R.id.DiaglogButton_Id:                    intent = new Intent(MainActivity.this, DiaglogActivity.class);            }            startActivity(intent);        }    }}

现在开始正式编写AlertDialog的代码:

回到activity_dialog这个布局文件中,设置几个按钮用于显示不同的Diaglog的样式:

整体代码:

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

在DiagActivity获取这些按钮的控件实例,并为其绑定监听器:

先看看一看默认的Diaglog是怎样的,在样式一按钮的响应事件添加一个Diaglog:

整体代码:

package com.example.yuan.e06_gridview.Alertdialog;import android.annotation.SuppressLint;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.example.yuan.e05_listview.R;public class DiaglogActivity extends AppCompatActivity {    //声明引用    private Button mDialogButton1,mDialogButton2,mDialogButton3,mDialogButton4;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_diaglog);        //获取控件对象        mDialogButton1 = (Button)findViewById(R.id.DG_Button_Id1);        mDialogButton2 = (Button) findViewById(R.id.DG_Button_Id2);        mDialogButton3 = (Button) findViewById(R.id.DG_Button_Id3);        mDialogButton4 = (Button) findViewById(R.id.DG_Button_Id4);        //生成监听器对象,绑定监听器        DiaglogClickListener listener = new DiaglogClickListener();        mDialogButton1.setOnClickListener(listener);        mDialogButton2.setOnClickListener(listener);        mDialogButton3.setOnClickListener(listener);        mDialogButton4.setOnClickListener(listener);    }    //设置按键的监听器类    class DiaglogClickListener implements View.OnClickListener{        @Override        public void onClick(View v) {            switch (v.getId()){                case R.id.DG_Button_Id1:                    //采用AlertDialog的设计者模式                    AlertDialog.Builder bulider = new AlertDialog.Builder(DiaglogActivity.this);                    //设置标题                    bulider.setTitle("请回答问题");                    //设置提示信息                    bulider.setMessage("你觉得今天天气怎么样?");                    //设置属性                    bulider.setPositiveButton("很好", new DialogInterface.OnClickListener() {                        @Override                        public void onClick(DialogInterface dialog, int which) {                            Toast.makeText(getApplicationContext(),"天气很好",Toast.LENGTH_LONG).show();                        }                    })                            .setNeutralButton("一般", new DialogInterface.OnClickListener() {                                @Override                                public void onClick(DialogInterface dialog, int which) {                                    Toast.makeText(getApplicationContext(),"天气一般",Toast.LENGTH_LONG).show();                                }                            }).setNegativeButton("糟糕", new DialogInterface.OnClickListener() {                        @Override                        public void onClick(DialogInterface dialog, int which) {                            Toast.makeText(getApplicationContext(),"天气糟糕",Toast.LENGTH_LONG).show();                        }                    }).show();                    break;                case R.id.DG_Button_Id2:                    break;                case R.id.DG_Button_Id3:                    break;                case R.id.DG_Button_Id4:                    break;            }        }    }}

运行应用程序:

点击样式一按钮:

出现一个弹窗,旁边的背景色变暗:

选择三个的选项,都会有一个Toast的弹窗:

同样也可以为这个Dialog设置一个图标:

现在再次运行程序,就可以看到这个图标了:


单选样式的AlertDialog:

运行应用程序:

选择样式二:

弹出一个Dialog:

选择之后会有一个Toast的弹窗:


 可以看到上面的单选按钮还是比较简单的,RadioButton,还有显示按钮的状态呢?这个AlertDialog同样也可以做到

注意:checkedItem表示默认选中的选项,0,表示默认选中第一个,也就是男

运行应用程序:

这样就像ReadioButton一样的样式了。

 现在发现我们选择之后,这个AlertDialog仍然是存在的,除非点击旁边暗灰色部分和Back按钮时,这个对话框才会消失。

如果我们想让点击想之后就让对话框就消失怎么做呢?

运行应用程序:

选中男或者女之后,弹窗,这个对话框消失:


AlertDialog多选样式:

运行应用程序:

点击样式四:

默认选中一个唱歌选项:

选择选项也会出现弹窗:

总体代码:

package com.example.yuan.e06_gridview.Alertdialog;import android.annotation.SuppressLint;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.example.yuan.e05_listview.R;import com.example.yuan.e06_gridview.util.ToastUtil;public class DiaglogActivity extends AppCompatActivity {    //声明引用    private Button mDialogButton1,mDialogButton2,mDialogButton3,mDialogButton4;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_diaglog);        //获取控件对象        mDialogButton1 = (Button)findViewById(R.id.DG_Button_Id1);        mDialogButton2 = (Button) findViewById(R.id.DG_Button_Id2);        mDialogButton3 = (Button) findViewById(R.id.DG_Button_Id3);        mDialogButton4 = (Button) findViewById(R.id.DG_Button_Id4);        //生成监听器对象,绑定监听器        DiaglogClickListener listener = new DiaglogClickListener();        mDialogButton1.setOnClickListener(listener);        mDialogButton2.setOnClickListener(listener);        mDialogButton3.setOnClickListener(listener);        mDialogButton4.setOnClickListener(listener);    }    //设置按键的监听器类    class DiaglogClickListener implements View.OnClickListener{        @Override        public void onClick(View v) {            switch (v.getId()){                case R.id.DG_Button_Id1:                    //采用AlertDialog的设计者模式                    AlertDialog.Builder bulider = new AlertDialog.Builder(DiaglogActivity.this);                    //设置标题                    bulider.setTitle("请回答问题");                    //设置提示信息                    bulider.setMessage("你觉得今天天气怎么样?");                    //设置图标                    bulider.setIcon(R.drawable.toast1);                    //设置属性                    bulider.setPositiveButton("很好", new DialogInterface.OnClickListener() {                        @Override                        public void onClick(DialogInterface dialog, int which) {                            Toast.makeText(getApplicationContext(),"天气很好",Toast.LENGTH_LONG).show();                        }                    })                            .setNeutralButton("一般", new DialogInterface.OnClickListener() {                                @Override                                public void onClick(DialogInterface dialog, int which) {                                    Toast.makeText(getApplicationContext(),"天气一般",Toast.LENGTH_LONG).show();                                }                            }).setNegativeButton("糟糕", new DialogInterface.OnClickListener() {                        @Override                        public void onClick(DialogInterface dialog, int which) {                            Toast.makeText(getApplicationContext(),"天气糟糕",Toast.LENGTH_LONG).show();                        }                    }).show();                    break;                case R.id.DG_Button_Id2:                    final String [] array = new String[]{"男","女"};                    AlertDialog.Builder bulier1 = new AlertDialog.Builder(DiaglogActivity.this);                    bulier1.setTitle("选择你的性别").setItems(array, new DialogInterface.OnClickListener() {                        @Override                        //witch是数组的索引,从0开始                        public void onClick(DialogInterface dialog, int which) {                            Toast.makeText(getApplicationContext(),array[which],Toast.LENGTH_LONG).show();                        }                    }).show();                    break;                case R.id.DG_Button_Id3:                    final String [] array3 = new String[]{"男","女"};                    AlertDialog.Builder bulier3 = new AlertDialog.Builder(DiaglogActivity.this);                    bulier3.setTitle("选择你的性别");                    bulier3.setSingleChoiceItems(array3, 0, new DialogInterface.OnClickListener() {                        @Override                        public void onClick(DialogInterface dialog, int which) {                            Toast.makeText(getApplicationContext(),array3[which],Toast.LENGTH_LONG).show();                            //对话框消失                            dialog.dismiss();                        }                    }).setCancelable(false).show();                    break;                case R.id.DG_Button_Id4:                    final String [] array4 = new String[]{"唱歌","跳舞","下棋","打球"};                    boolean [] isSelected = new boolean[]{true,false,false,false};                    AlertDialog.Builder bulier4 = new AlertDialog.Builder(DiaglogActivity.this);                    bulier4.setTitle("选择你的兴趣").setMultiChoiceItems(array4, isSelected, new DialogInterface.OnMultiChoiceClickListener() {                        @Override                        public void onClick(DialogInterface dialog, int which, boolean isChecked) {                            ToastUtil.showMsg(DiaglogActivity.this,array4[which]+":"+isChecked);                        }                    }).setPositiveButton("确定", new DialogInterface.OnClickListener() {                        @Override                        public void onClick(DialogInterface dialog, int which) {                            Toast.makeText(getApplicationContext(),"选择确定",Toast.LENGTH_LONG).show();                        }                    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {                        @Override                        public void onClick(DialogInterface dialog, int which) {                            Toast.makeText(getApplicationContext(),"选择取消",Toast.LENGTH_LONG).show();                        }                    }).show();                    break;            }        }    }}

 


AlertDialog自定义样式:

在activity_dialog布局文件再增加一个Button控件:

然后再对应的Activity( DialogActivity)声明空间,绑定监听器:

需要为自定义的样式提供一个子布局文件,所以新建一个布局文件,命名为:layout_dialog

根布局为线性布局

设置一个登录界面:

整体代码如下:

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

 

运行应用程序:

按键自定义样式:

弹出一个对话框,可以在输入账号和密码之后,在登陆按钮的点击事件去账号密码:


自定义Dialog:

新建一个包,命名为:widgeDialog

在包中新建一个类CustomDialog继承自Dialog:

编写CustomDialog的内容:


新建一个布局文件为,为Dialog提供子布局:

命名为:layout_custom_dialog

在布局文件话一个UI界面如下图所示:

整体代码:

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

  • 我们可以为这个Dialog设置一个自定圆角的形状:

首先新建Drawable resoure file,根布局是shape:

命名为:layout_custom_dialog

  •  也可以设置一个按压的效果:

首先新建Drawable resoure file,根布局是selector,命名为:button_select

设置按压效果:

然后在layout_custom_dialog的布局文件设置确定和取消文本的背景色为这个drawable。


回到CustomDialog.java中:

希望可以通过外部的函数去改变这个自定义Dialog的显示内容,怎么做?

使用快捷功能来写他们的Set方法:

自动为我们创建了这些方法:

定义连个接口,用于确定和取消按钮的监听器事件外部的回调函数:

声明这两个接口:

因为设置确定取消按钮的时候,还需要设置他的点击事件,在下面两个函数增加一个入口函数:


既然我们要实现点击事件我们可以直接让CustomDialog去实现OnClickListener,然后复写里面的onClick方法:

既继承Dialog,又实现OnClickListener:

复写onClick方法:

为确定按钮和取消按钮设置监听器:

为了学习前面一样,采用Bulider模式,调用函数,我们改变一下setTitle()setMessage()方法的返回值,模仿Builder的模式:

如下:

 

整体代码:

package com.example.yuan.e06_gridview.widgeDialog;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.os.Bundle;import android.support.annotation.NonNull;import android.text.TextUtils;import android.view.View;import android.widget.TextView;import com.example.yuan.e05_listview.R;public class CustomDialog extends Dialog implements View.OnClickListener{    //声明应用    private TextView mTextViewTitle,mTextViewMsg,mTextViewCancle,mTextViewConfirm;    private String title,message,confirm, cancel;   //声明接口    private IOnConfirmListener confirmListener;    private IOnCancelListener cancelListener;    public CustomDialog(@NonNull Context context) {        super(context);    }    public CustomDialog(@NonNull Context context,int themeId) {        super(context);    }    public CustomDialog setTitle(String title) {        this.title = title;        return this;    }    public CustomDialog setMessage(String message) {        this.message = message;        return this;    }    public CustomDialog setConfirm(String confirm,IOnConfirmListener listener) {        this.confirm = confirm;        this.confirmListener = listener;        return this;    }    public CustomDialog setCancel(String cancel,IOnCancelListener listener) {        this.cancel = cancel;        this.cancelListener = listener;        return this;    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //设置Dialog的布局        setContentView(R.layout.layout_custom_dialog);        //获取控件实体        mTextViewTitle=(TextView) findViewById(R.id.TextView_titleId);        mTextViewMsg=(TextView) findViewById(R.id.TextView_MessageId);        mTextViewConfirm=(TextView) findViewById(R.id.TextView_ComfirmId);        mTextViewCancle=(TextView) findViewById(R.id.TextView_CancleId);        //判断文本框是否为空        if(!TextUtils.isEmpty(title)){            mTextViewTitle.setText(title);        }        if(!TextUtils.isEmpty(message)){            mTextViewMsg.setText(message);        }        if(!TextUtils.isEmpty(cancel)){            mTextViewCancle.setText(cancel);        }        if(!TextUtils.isEmpty(confirm)){            mTextViewConfirm.setText(confirm);        }        //设置监听器,传进去一个参数是当前的Dialog        mTextViewConfirm.setOnClickListener(this);        mTextViewCancle.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.TextView_ComfirmId:                if (confirmListener != null){                    confirmListener.onConfirm(this);                }                break;            case R.id.TextView_CancleId:                if (cancelListener != null){                    cancelListener.onCancel(this);                }                break;        }    }    //定义点击事件的外部回调函数    //确定按钮的回调函数    public interface IOnConfirmListener{        void onConfirm(CustomDialog dialog);    }    //取消按钮的监听器回调函数    public interface IOnCancelListener{        void onCancel(CustomDialog dialog);    }}

 


 在activity_dialog这个布局文件增加按钮控件,用于跳转到自定义的Activity:

修改DialogActivity,获取按钮实例,然后绑定监听器:

代码:

 case R.id.DG_Button_Id6:                    //实例化一个CustomDialog                    CustomDialog customDialog = new CustomDialog(DiaglogActivity.this);                    customDialog.setTitle("温馨提示").setMessage("是否删除数据")                            .setCancel("取消", new CustomDialog.IOnCancelListener() {                                @Override                                public void onCancel(CustomDialog dialog) {                                    ToastUtil.showMsg(getApplicationContext(),"取消");                                }                            }).setConfirm("确定", new CustomDialog.IOnConfirmListener() {                        @Override                        public void onConfirm(CustomDialog dialog) {                            ToastUtil.showMsg(getApplicationContext(),"确认");                        }                    }).show();                    break;

 现在算是已经完成了自定义的Dialog样式,如我们画的布局所示,但是发现比较尴尬的一点事尺寸不对,像是被压缩了一样, 有点难看,这是我们就需要再设置一下Dialog的宽度了,回到DialogActivity.java这个类中,在setContentView(R.layout.layout_custom_dialog);后面增加宽度的设置:

代码:

 //设置Dialog的宽度        WindowManager m = getWindow().getWindowManager();        Display d = m.getDefaultDisplay();        WindowManager.LayoutParams p = getWindow().getAttributes();        Point size = new Point();        d.getSize(size);        p.width = (int) (size.x * 0.8); //设置Dialog的宽度为当前手机屏幕的宽度的80%        getWindow().setAttributes(p);

.运行应用程序:

点击自定义Dialog按钮,填出一个Dialog窗口:

但你选中一个不放时,会有按压效果:

点击确定之后,填出一个Toast显示,确定,然后Dialog消失:


 

更多相关文章

  1. Android中两种设置全屏或者无标题的方法
  2. Android沉浸式状态栏小结
  3. 使用android传感器自己编写温度计,湿度计 支持android5.0
  4. ListView的item高度调整
  5. Android(安卓)Toolbar控件
  6. 获取andrid apn信息
  7. 20172313 2017-2018-2 《程序设计与数据结构》第十一周学习总结
  8. Android中GUI系统的Event路由机制
  9. Android中TabLayout使用详解

随机推荐

  1. Android(安卓)apps应用检查更新代码
  2. Android(安卓)BottomNavigationView的使
  3. android正确使用killProcess完全退出应用
  4. Android异常捕获防止崩溃弹框
  5. Android(安卓)以Json格式发送Post服务请
  6. Android中Handler的使用
  7. Android(安卓)ClickableRoundedBackgroun
  8. Android(安卓)查看保存图片到相册
  9. Android(安卓)浅析 Volley
  10. android Processes and Threads的注意事