Android07之Toast和AlertDialog详解

上一次我们详细的讲解了RecyclerView控件的具体使用,可以说该控件使用非常的广泛,不熟悉的有必要花时间认真学习一下,博客链接为https://blog.csdn.net/chenpeixing361/article/details/89296370。这一次我们继续讲解新的知识,Toast和AlertDialog。

Toast

Toast在前面的博客里我们都用的很多,相信大家都有所熟悉和了解,这次我们专门来进行讲解,包含如下内容:①显示消息;②设置显示的位置;③自定义显示内容(比如添加图片);④简单封装。

我们新建ToastActivity活动类,附带的activity_toast.xml文件布局包含四个按钮组件,代码如下:



    

运行的界面截图如下:

Android07之Toast和AlertDialog详解_第1张图片

然后自定义具体的布局文件,用于第三种用法带图片的布局样式,新建的layout_toast.xml文件代码如下:




    
        
        
    

该文件包含一个ImageView和一个TextView,具体属性这里不再展开说明,可参照之前写的博客。

接下来就是按钮点击事件的处理了,我们来到ToastActivity,具体的代码如下:

package com.autumn;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.autumn.util.ToastUtil;

public class ToastActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_toast);
        Button btnToast1 = findViewById(R.id.btn_toast1);
        Button btnToast2 = findViewById(R.id.btn_toast2);
        Button btnToast3 = findViewById(R.id.btn_toast3);
        Button btnToast4 = findViewById(R.id.btn_toast4);
        OnClick onClick = new OnClick();
        btnToast1.setOnClickListener(onClick);
        btnToast2.setOnClickListener(onClick);
        btnToast3.setOnClickListener(onClick);
        btnToast4.setOnClickListener(onClick);
    }

    class OnClick implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_toast1:
                    Toast.makeText(getApplicationContext(),"Hello,autumn_leaf!",Toast.LENGTH_LONG).show();
                    break;
                case R.id.btn_toast2:
                    Toast toastCenter = Toast.makeText(getApplicationContext(),"居中Toast",Toast.LENGTH_LONG);
                    toastCenter.setGravity(Gravity.CENTER,0,0);
                    toastCenter.show();
                    break;
                case R.id.btn_toast3:
                    Toast toastCustom = new Toast(getApplicationContext());
                    LayoutInflater inflater = LayoutInflater.from(ToastActivity.this);
                    View view = inflater.inflate(R.layout.layout_toast,null);
                    ImageView imageView = view.findViewById(R.id.iv_toast);
                    TextView textView = view.findViewById(R.id.tv_toast);
                    imageView.setImageResource(R.drawable.icon_simle);
                    textView.setText("自定义Toast");
                    toastCustom.setView(view);
                    toastCustom.setDuration(Toast.LENGTH_LONG);
                    toastCustom.show();
                    break;
                case R.id.btn_toast4:
                    ToastUtil.showMsg(ToastActivity.this,"包装过的Toast");
                    break;
                default:
                    break;
            }
        }
    }
}

我们用了switch...case...的语法结构,这样代码方便阅读,按钮1就是普通的显示消息,按钮2是把消息居中,按钮3是自定义的消息(以图片+文本形式展示),点击按钮3,运行截图如下:

Android07之Toast和AlertDialog详解_第2张图片

点击按钮4,是我们自定义的简单封装,我们新建util包,然后在包下新建ToastUtil类,代码如下:

package com.autumn.util;

import android.content.Context;
import android.widget.Toast;

/**
 * Toast工具类
 * @Author:autumn_leaf
 * @Date:2019/04/13
 */
public class ToastUtil {
    public static Toast mToast;
    public static void showMsg(Context context, String msg) {
        if(mToast == null){
            mToast = Toast.makeText(context,msg,Toast.LENGTH_LONG);
        }else{
            mToast.setText(msg);
        }
        mToast.show();
    }
}

这样可以保证无论点击按钮多少次,最终只显示一次消息。

AlertDialog

AlertDialog从字面义理解为警告框,这里我们讲解如下内容:①默认样式;②单选样式;③多选样式;④自定义样式。

我们依然是新建DialogActivity类,附带的activity_dialog.xml我们布局包含5个按钮,代码如下:



    

即包含style1-style5总共5个按钮,每个按钮我们添加点击事件,并添加监听事件,DialogActivity代码如下:

package com.autumn;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.autumn.util.ToastUtil;

public class DialogActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
        Button btnDialog1 = findViewById(R.id.btn_dialog1);
        Button btnDialog2 = findViewById(R.id.btn_dialog2);
        Button btnDialog3 = findViewById(R.id.btn_dialog3);
        Button btnDialog4 = findViewById(R.id.btn_dialog4);
        Button btnDialog5 = findViewById(R.id.btn_dialog5);
        OnClick onClick = new OnClick();
        btnDialog1.setOnClickListener(onClick);
        btnDialog2.setOnClickListener(onClick);
        btnDialog3.setOnClickListener(onClick);
        btnDialog4.setOnClickListener(onClick);
        btnDialog5.setOnClickListener(onClick);
    }

    class OnClick implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_dialog1:
                    //分别是积极的按钮,中性的按钮和消极的按钮
                    AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
                    builder.setTitle("请回答:").setMessage("你对Android感兴趣吗?").setIcon(R.drawable.icon_user).setPositiveButton("感兴趣", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ToastUtil.showMsg(DialogActivity.this,"你很诚实!");
                        }
                    }).setNeutralButton("还行", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ToastUtil.showMsg(DialogActivity.this,"真的吗?");
                        }
                    }).setNegativeButton("不喜欢", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ToastUtil.showMsg(DialogActivity.this,"你再想想!");
                        }
                    }).show();
                    break;
                case R.id.btn_dialog2:
                    final String[] array = new String[]{"男","女"};
                    AlertDialog.Builder builder1 = new AlertDialog.Builder(DialogActivity.this);
                    builder1.setTitle("请选择性别:").setItems(array, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ToastUtil.showMsg(DialogActivity.this,array[which]);
                        }
                    }).show();
                    break;
                case R.id.btn_dialog3:
                    final String[] array2 = new String[]{"男","女"};
                    AlertDialog.Builder builder2 = new AlertDialog.Builder(DialogActivity.this);
                    //默认选中"女",类似RadioButton样式
                    builder2.setTitle("请选择性别:").setSingleChoiceItems(array2,1, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ToastUtil.showMsg(DialogActivity.this,array2[which]);
                            dialog.dismiss();
                        }
                    }).setCancelable(false).show();
                    break;
                case R.id.btn_dialog4:
                    //类似Checkbox的样式
                    final String[] array3 = new String[]{"吃饭","睡觉","写代码"};
                    final boolean[] isSelected = new boolean[]{false,false,true};
                    AlertDialog.Builder builder3 = new AlertDialog.Builder(DialogActivity.this);
                    builder3.setTitle("请选择日常活动:").setMultiChoiceItems(array3, isSelected, new DialogInterface.OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                            ToastUtil.showMsg(DialogActivity.this,array3[which]+":"+isChecked);
                        }
                    }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    }).show();
                    break;
                case R.id.btn_dialog5:
                    //自定义View样式
                    AlertDialog.Builder builder4 = new AlertDialog.Builder(DialogActivity.this);
                    LayoutInflater inflater = LayoutInflater.from(DialogActivity.this);
                    View loginView = inflater.inflate(R.layout.layout_dialog,null);
                    EditText etUsername = loginView.findViewById(R.id.et_username);
                    EditText etPassword = loginView.findViewById(R.id.et_password);
                    Button btnLogin = loginView.findViewById(R.id.btn_login);
                    btnLogin.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                        }
                    });
                    builder4.setTitle("请先登录:").setView(loginView);
                    builder4.show();
                    break;
            }
        }
    }
}

接下来我们来进行解释:

(1)第一个按钮时默认的样式,我们用AlertDialog.Builder新建builder,然后设置标题,消息,图标,然后对三种不同类型的按钮(积极,中性,消极)分别显示和弹出不同的消息内容,运行效果如下图所示:

Android07之Toast和AlertDialog详解_第3张图片

(2)第二个按钮和第三个按钮我们对比分析,都有点类似radiobutton的功能,只不过按钮3多了前面的选择按钮,前者用的是setItems方法,后者用的是setSingleChoiceItems方法,并默认选择"女"选项,按钮3的运行截图如下所示:

Android07之Toast和AlertDialog详解_第4张图片

(3)按钮4则是有Item多选的功能,类似checkbox,我们这里用到setMultiChoiceItems函数,用于多选,运行截图如下:

Android07之Toast和AlertDialog详解_第5张图片

(4)按钮5是自定义的view样式,会弹出登录提示对话框,我们新建layout_dialog.xml文件,代码如下:



    
    
    

运行效果截图如下所示:

Android07之Toast和AlertDialog详解_第6张图片

好了,这次关于Toast和AlertDialog的讲解就到这里了,源码链接为https://github.com/229394/AndroidBasic,有疑惑的可以在下方评论区留言!

你可能感兴趣的:(Android,Android)