Android控件 常见的Dialog使用方法

Dialog是Android中根据用户的意向弹出一些提示的信息,告诉用户是否要执行该操作的一种小的窗体,也就是弹出式菜单。

以下为Alert Dialog、Date Dialog、ArrayAdapter Dialog、自定义 Dialog、4种Dialog的实现方法。

1.Alert Dialog 提示对话框

样式展示:
在这里插入图片描述

//AlertDialog 生成方法一
//使用类 AlertDialog
public void  alertDialog() {
    AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle("提示:");
    alertDialog.setMessage("确定要退出程序吗?");
    alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", 
    	new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });

    alertDialog.setButton(DialogInterface.BUTTON_NEUTRAL, "想一下", 
    	new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });

    alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", 
    		new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
    });
    alertDialog.show();
}

//AlertDialog 生成方法二
//使用类 AlertDialog.Builder
private void  alertDialog2() {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
    alertDialog.setTitle("提示:");
    alertDialog.setMessage("确定要退出程序吗?");
    alertDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });
    alertDialog.setNegativeButton("取消", null);
    alertDialog.show();
}

2.Date Dialog 日期选择对话框

样式展示:
在这里插入图片描述
代码实现:

public void dataDialog() {
    new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            String date = String.format("%d-%d-%d", year, month+1, dayOfMonth);
            Toast.makeText(MainActivity.this, date, Toast.LENGTH_SHORT).show();
        }

    }, Calendar.getInstance().get(Calendar.YEAR),//获取当前时间设置为默认选项
            Calendar.getInstance().get(Calendar.MONTH),
            Calendar.getInstance().get(Calendar.DAY_OF_MONTH)).show();
}

public void timeDialog() {
    new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            String date = String.format("%d:%d",hourOfDay, minute);
            Toast.makeText(MainActivity.this, date, Toast.LENGTH_SHORT).show();
        }

    }, 0, 0, true).show();
}

3.ArrayAdapter Dialog 自定义列表对话框

利用 ArrayAdapter 可以更好的自定义Dialog内容里的选项。

样式展示:
在这里插入图片描述
实现方法也很简单,首先定义一个 Layout 页面,里边可以自定义图标,也可以在里面定义各种 button。
在这里插入图片描述
array_item_layout.xml :

<?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="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp"
    android:gravity="center_vertical">

    <ImageView
        android:id="@+id/item_icon"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:src="@drawable/star"/>

    <TextView
        android:id="@+id/item_txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试"
        android:layout_marginLeft="15dp"/>

</LinearLayout>

代码实现:

public void arrayDialog() {
	final String[] items = {"Java", "Mysql", "Android", "HTML", "C", "JavaScript"};
	//数组适配器
	//参数1:环境
	//参数2:布局资源索引,指的是每一项数据所呈现的样式android.R.layout.xxx
	//参数3:数据源
	ArrayAdapter adapter = new ArrayAdapter(this, R.layout.array_item_layout, R.id.item_txt, items);
	AlertDialog.Builder builder = new AlertDialog.Builder(this)
		//.setView(view)也可以使用setView来直接设置inflate加载的布局
		.setTitle("请选择")
		//参数1:适配器对象(对数据显示样式的规则制定器)
		//参数2:监听器
		.setAdapter(adapter, new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialogInterface, int i) {
				Toast.makeText(MainActivity.this, items[i], Toast.LENGTH_SHORT).show();
				dialogInterface.dismiss();
			}
		});
	builder.show();
}

4.自定义 Dialog

样式展示:
在这里插入图片描述
首先还是先创建一个layout编排自定义样式。
在这里插入图片描述
xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:background="@mipmap/dialog_bg">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="确定要退出吗?"
        android:textSize="18sp"
        android:textColor="#000000"
        android:layout_marginTop="190dp"
        />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="25dp">
        <Button
            android:id="@+id/no_btn"
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:background="@mipmap/no_btn" />
        <Button
            android:id="@+id/yes_btn"
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:layout_marginStart="20dp"
            android:background="@mipmap/yes_btn" />
    </LinearLayout>
</LinearLayout>

然后定义一个myDialog类继承Dialog类,重载构造函数。

public class MyDialog extends Dialog {

    public MyDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
        //设置布局
        setContentView(R.layout.dialog_layout);

        findViewById(R.id.yes_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.exit(0);
            }
        });

        findViewById(R.id.no_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
    }
}

在style.xml中定义一个风格,去掉dialog自带的标题以及让背景变半透明。

    <style name="MyDialog"  parent="android:style/Theme.Dialog">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

在MainActivity类中定义一个方法,用于编写显示dialog以及显示的位置。

public void diyDialog() {
	//传入context和style的id
    MyDialog myDialog = new MyDialog(this, R.style.MyDialog);
    //自定义dialog的显示位置
    Window window = myDialog.getWindow();
    window.setGravity(Gravity.CENTER);
    WindowManager.LayoutParams lp = myDialog.getWindow().getAttributes();
    lp.y = -250;
    window.setAttributes(lp);
    myDialog.show();
}

自定义dialog的流程大概就是这样,最后在自己的逻辑代码上调用该方法显示自定义的dialog就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值