从零开始水安卓——基础UI组件9(AlterDialog)

题外话…试用了一下csdn的markdown编辑器,简直不要太难用…上传个图片竟然改不了大小…查了一下…还得通过img标签设置src来想办法…所以这篇文章可能会出现图片过大的情况(因为是原始尺寸)
太真实了…代码块语法还不能高亮?

Dialog

开发中经常会在界面上弹出一些对话框,询问用户或让用户选择,这些功能称为Android Dialog,它具有一定的类型,如下图。

图片出处:https://www.cnblogs.com/gzdaijie/p/5222191.html
图片出处:https://www.cnblogs.com/gzdaijie/p/5222191.html

提示信息对话框

先建立一个按钮,修改activity_main.xml

    <Button
        android:id="@+id/button"
        android:layout_width="290dp"
        android:layout_height="122dp"
        android:layout_marginTop="201dp"
        android:text="提示对话框"
        android:onClick="dialog"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

然后修改MainActivity

package com.example.a316;

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

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void dialog(View view){
        //创建提示对话框构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置的东西都在这里设置
        builder.setTitle("这是标题");//设置标题,分两种,要么引用资源,要么直接给字符串
        builder.setMessage("这是提示内容");//设置提示内容
        builder.setIcon(R.mipmap.ic_launcher);//设置个小图片
        //确定类按钮,仅代表样式
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"按下了确认按钮",Toast.LENGTH_LONG).show();
            }
        });//设置按钮 两个参数,一个参数是按钮显示内容,一个参数是按钮事件
        //否定类按钮
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"按下了取消按钮",Toast.LENGTH_LONG).show();
            }
        });
        //中立按钮
        builder.setNeutralButton("中间的", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"按下了中间的按钮",Toast.LENGTH_LONG).show();
            }
        });


        //最后需要创建
        AlertDialog dialog = builder.create();
        dialog.show();
        //也可以省略的写
        //builder.show();
    }
}

需要注意的事项已经写在代码中了。
最后补充说明,Positive、Negative、Neutral三种按钮,仅代表样式,即分别位于左侧右侧中间(老版本),新版本的话,分别是右侧偏左,最右侧,和左侧,如下图。

在这里插入图片描述
然后实际上不一定要Positive就一定是“积极的”的按钮…

列表选项对话框

再建立一个按钮

    <Button
        android:id="@+id/button2"
        android:layout_width="245dp"
        android:layout_height="118dp"
        android:layout_marginBottom="223dp"
        android:text="列表选项对话框"
        android:onClick="dialog2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />
public void dialog2(View view){
        //创建构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final String[] items ={"选项1","选项2","选项3"};
        //设置列表,两个参数,前者为你的参数列表,后者为单击事件
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,items[which],Toast.LENGTH_LONG).show();
            }
        });

        //设置的东西都在这里设置
        builder.setTitle("这是标题");//设置标题,分两种,要么引用资源,要么直接给字符串

        //最后需要创建
        AlertDialog dialog = builder.create();
        dialog.show();
        //也可以省略的写
        //builder.show();
    }

有一个注意事项
方法中内部类访问方法的局部变量,该变量必须要用final修饰
此外,列表对话框已经有点击事件了 所以不需要再写按钮了。

扫描二维码关注公众号,回复: 5564063 查看本文章

在这里插入图片描述

多选列表对话框

类似的…

    <Button
        android:id="@+id/button3"
        android:layout_width="245dp"
        android:layout_height="0dp"
        android:layout_marginBottom="70dp"
        android:onClick="dialog3"
        android:text="多选列表对话框"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />

修改MainActivity
关键在于 builder.setMultiChoiceItems(a,b,c)
三个参数,第一个参数列表,第二个是一个布尔类型数组可以设置哪些已经被选中,最后是单击事件


    public void dialog3(View view){
        //创建构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final String[] items ={"选项1","选项2","选项3"};
        final ArrayList<String> list =new ArrayList<String>();
        //设置列表,两个参数,前者为你的参数列表,后者为单击事件
        builder.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if(isChecked==true){
                    list.add(items[which]);
                }
                else{
                    list.remove(items[which]);
                }
            }
        });
        //确定显示List
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,list.toString(),Toast.LENGTH_LONG).show();
            }
        });
        builder.setNegativeButton("清除", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                list.clear();
                //关闭对话框
                dialog.dismiss();
            }
        });
        builder.setTitle("这是标题");//设置标题,分两种,要么引用资源,要么直接给字符串

        AlertDialog dialog = builder.create();
        dialog.show();
    }

在这里插入图片描述
按下确定后…
在这里插入图片描述

多项单选对话框

还是一个按钮

 <Button
        android:id="@+id/button3"
        android:layout_width="245dp"
        android:layout_height="39dp"
        android:layout_marginBottom="70dp"
        android:onClick="dialog4"
        android:text="多项单选对话框"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />

然后MainActivity
主要区别在于builder.setSingleChoiceItems(列表项,默认选中的项目,事件)
默认选中的项目参数为一个int类型,代表数组的第一个元素…例如填0,就是列表项第一个元素

    //定义在方法外
    String result="选项1";
    public void dialog4(View view){
        //创建构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final String[] items ={"选项1","选项2","选项3"};
        
        //设置列表,两个参数,前者为你的参数列表,后者为单击事件
        builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                result = items[which];
                Toast.makeText(MainActivity.this,"你选中了"+items[which],Toast.LENGTH_LONG);
            }
        });
        //确定显示List
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,result,Toast.LENGTH_LONG).show();
            }
        });
        builder.setNegativeButton("清除", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //关闭对话框
                dialog.dismiss();
            }
        });
        builder.setTitle("这是标题");//设置标题,分两种,要么引用资源,要么直接给字符串

        AlertDialog dialog = builder.create();
        dialog.show();
    }

在这里插入图片描述

按下确认后的效果
在这里插入图片描述

自定义对话框

还是activity_main.xml中还是需要添加一个按钮,就不再重复了…
主要区别还是在MainActivity
以登录对话框为例

然后不一样的地方是还需要建立一个layout文件在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:id="@+id/id"
        android:inputType="textPersonName"
        android:hint="username"
        />
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:id="@+id/password"
        android:inputType="textPassword"
        android:hint="password"
        />
    

</LinearLayout>

然后通过 builder.setView(R.layout.loginlayout); 来引用这个布局
注意API版本必须要高于21

下面提供低于API21的写法

    public void  dialog5(View view){

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("登录对话框");//设置标题,分两种,要么引用资源,要么直接给字符串

        //builder.setView(R.layout.loginlayout);API大于21
        //实例化布局对象
        final View v = getLayoutInflater().inflate(R.layout.loginlayout,null);
        builder.setView(v);

        //点击确认得到用户名和密码的值
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                EditText text = v.findViewById(R.id.id);
                EditText text2 = v.findViewById(R.id.password);

                String username = text.getText().toString();
                String password = text2.getText().toString();

                Toast.makeText(MainActivity.this,username+"/"+password,Toast.LENGTH_LONG).show();
            }
        });
        builder.setNegativeButton("清除", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //关闭对话框
                dialog.dismiss();
            }
        });

        AlertDialog dialog = builder.create();
        dialog.show();
    }

在这里插入图片描述
在这里插入图片描述

输入 1234和444之后
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/nishigesb123/article/details/88605356
今日推荐