对话框经常以小窗口的形式展现
常用的对话框有六种
对话框 |
---|
普通对话框 |
单选对话框 |
多选对话框 |
进度条对话框 |
消息对话框 |
自定义对话框 |
1.普通对话框
通常有“确定”和”取消“按钮。
方法名 | 功能 |
---|---|
setTitle() | 设置对话框标题 |
setIcon() | 设置对话框图标 |
setPositiveButton() | 设置对话框添加 按钮 |
setMessage() | 设置对话框提示信息 |
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AlertDialog.Builder(this)//绑定当前窗口
.setTitle("Dialog对话框")//设置标题
.setIcon(R.mipmap.ic_launcher)//设置图标
.setPositiveButton("确定",null)//添加确定按钮
.setNegativeButton("取消",null)//添加取消按钮
.setMessage("确定退出吗")//设置提示细信息
.create()//创建对话框
.show();//显示对话框
}
}
效果图
2.单选对话框
单选对话框和RadioButton作用类似,只能选择一个选项,单选对话框通过AlertDialog对象调用setSingleChoiceItems()方法创建的。setSingleChoiceItems方法有三个参数,第一个参数建立数组,用于显示选项内容,第二个参数设置是否默认选中,“0”表示默认选中第一个选项,如果默认未选中,参数则写“-1”,第三个参数是设立监听。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AlertDialog.Builder(this)//绑定当前窗口
.setTitle("图通对话框")//设置标题
.setIcon(R.mipmap.ic_launcher)//设置图标
.setPositiveButton("确定",null)//添加确定按钮
.setSingleChoiceItems(new String[]{"男","女"},0,null)//第二个参数代表默认选中哪一个,如果都不选中设置-1
.create()//创建对话框
.show();//显示对话框
}
}
效果图
3.多选对话框
多选对话框通过调用AlertDialog的setMultiChoiceItems()方法创建。该方法有三个参数,第一个参数建立数组,用于显示选项内容,第二个参数是boolean数组,用来判断哪个选项需要勾选,如果没有选项选中则用“null”,如果有默认选中则该数组定义的长度要对应第1个参数设置的选项个数,第三个参数设置监听
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AlertDialog.Builder(this)//绑定当前窗口
.setTitle("图通对话框")//设置标题
.setIcon(R.mipmap.ic_launcher)//设置图标
.setPositiveButton("确定",null)//添加确定按钮
//第一个参数显示内容,第二个参数代表哪个选项需要默认被勾选,如果没有则为null
//第三个参数:为每一个多选项绑定一个监听器
.setMultiChoiceItems(new String[]{"大学生","教师","政府官员"},null,null)
.create()//创建对话框
.show();//显示对话框
}
}
效果
4.进度条对话框
在Android中提供了圆形进度条和水平进度条两种样式,通过setProgressStyle()方法设置进度条样式。常量ProgressDialog.STYLE_HORIZONTAL代表水平进度条,ProgressDialog.STYLE_SPINNER代表圆形进度条。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ProgressDialog prodialog;
prodialog = new ProgressDialog(this);
prodialog.setTitle("进度条对话框");
prodialog.setIcon(R.mipmap.ic_launcher);
prodialog.setMessage("正在下载。。。");
prodialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//ProgressDialog.STYLE_HORIZONTAL代表水平滚动条
//ProgressDialog.STYLE_SPINNER代表圆形进度条
prodialog.show();
}
}
效果
5.消息对话框
显示时间的长短是通过常量Toast.LENGTH_SHORT和Toast.LENGTH_LONG控制的
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//当前对话框、显示内容、显示时长Toast.LENGTH_LONG长时间显示
//Toast.LENGTH_SHORT 短时间显示
Toast.makeText(this,"你好",Toast.LENGTH_LONG).show();
}
}
效果
6.自定义对话框
要注意的是Java的文件要在一个里面新建,然后选Android app
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="标题"
android:textSize="20sp"
android:gravity="center"
android:background="#cf8be1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:id="@+id/message"
android:background="#dac7e7"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定"
android:textSize="20sp"
android:id="@+id/btn_ok"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"
android:textSize="20sp"
android:id="@+id/btn_cancel"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
package com.example.hp.myapplication;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
/**
* Created MyDialogby hp on 2020/4/11.
*/
public class MyDialog extends Dialog {
private String message;
public MyDialog(Context context,String message){
super(context);
this.message=message;
}
public void onCreate(Bundle savedInstancState) {
super.onCreate(savedInstancState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mydialog);
TextView tv = findViewById(R.id.message);
tv.setText(message);
Button btnOk = findViewById(R.id.btn_ok);
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("MyDialog", "确定按钮被点击");
dismiss();//关闭对话按钮
}
});
Button btnCancel=findViewById(R.id.btn_cancel);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("MyDialog","取消按钮被点击");
dismiss();//关闭对话按钮
}
});
}
}
package com.example.hp.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import static android.os.Build.VERSION_CODES.M;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyDialog myDialog=new MyDialog(this,"自定义对话框");
myDialog.show();
}
}
效果
为按钮添加了监听事件,所以点击的时候会显示