Android开发基础之Dialog对话框大全
★Dialog对话框的使用
在Android的开发之中会用到很多中对话框,我相信大家都会注意到对话框的使用,在这里我会讲到7种对话框的使用方法。
首先我们先看一下我写的一个程序吧!
在这个程序中我们可以看见一共有7个Button也就是按钮,没点击一个按钮就会弹出一种对话框,我先把源代码贴出来再一一地讲解吧!
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="match_parent"
android:orientation="vertical"
>
<TextView
android:text="@string/title"
android:textSize="45dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="80dp" />
<Button
android:id="@+id/D1"
android:layout_width="match_parent"
android:layout_height="65dp" />
<Button
android:id="@+id/D2"
android:layout_width="match_parent"
android:layout_height="65dp" />
<Button
android:id="@+id/D3"
android:layout_width="match_parent"
android:layout_height="65dp" />
<Button
android:id="@+id/D4"
android:layout_width="match_parent"
android:layout_height="65dp" />
<Button
android:id="@+id/D5"
android:layout_width="match_parent"
android:layout_height="65dp" />
<Button
android:id="@+id/D6"
android:layout_width="match_parent"
android:layout_height="65dp" />
<Button
android:id="@+id/D7"
android:layout_width="match_parent"
android:layout_height="65dp" />
<EditText
android:layout_marginTop="500dp"
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="50dp" />
</LinearLayout>
java代码:
package com.example.zhangrenjie.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class DialogActivity extends Activity {
private Button dailog1;
private Button dailog2;
private Button dailog3;
private Button dailog4;
private Button dailog5;
private Button dailog6;
private Button dailog7;
final String[]Items = {"one","two","three","four","five","six"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog);
dialog1 = (Button) findViewById(R.id.D1);
dialog2 = (Button) findViewById(R.id.D2);
dialog3 = (Button) findViewById(R.id.D3);
dialog4 = (Button) findViewById(R.id.D4);
dialog5 = (Button) findViewById(R.id.D5);
dialog6 = (Button) findViewById(R.id.D6);
dialog7 = (Button) findViewById(R.id.D7);
dialog1.setText(R.string.D1);
dialog2.setText(R.string.D2);
dialog3.setText(R.string.D3);
dialog4.setText(R.string.D4);
dialog5.setText(R.string.D5);
dialog6.setText(R.string.D6);
dialog7.setText(R.string.D7);
dialog1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
oneDialog();
}
});
dialog2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
twoDialog();
}
});
dialog3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
threeDialog();
}
});
dialog4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fourDialog();
}
});
dialog5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fiveDialog();
}
});
dialog6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sixDialog();
}
});
dialog7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sevenDialog();
}
});
}
private void oneDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("你确定要离开吗?");
builder.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你选择了取消", Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你选择了确定", Toast.LENGTH_SHORT);
toast.show();
}
}) ;
builder.create().show();
}
private void twoDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("投票");
builder.setMessage("你喜欢什么样的女生");
builder.setPositiveButton("可爱的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你喜欢可爱的", Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setNeutralButton("年轻的",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你喜欢年轻的", Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setNegativeButton("漂亮的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你喜欢漂亮的", Toast.LENGTH_SHORT);
toast.show();
}
}) ;
builder.create().show();
}
private void threeDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("列表选择框");
builder.setItems(Items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast = Toast.makeText(getApplicationContext(),"您选择的id为"+which+",列名为"+Items[which],Toast.LENGTH_SHORT);
toast.show();
}
});
builder.create().show();
}
private void fourDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("单项选择框");
builder.setSingleChoiceItems(Items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast = Toast.makeText(getApplicationContext(),
"您选择的id为"+which+",列名为"+Items[which],Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}) ;
builder.create().show();
}
int MAX = 100;
private void fiveDialog(){
final ProgressDialog myprogressbar = new ProgressDialog(DialogActivity.this);
myprogressbar.setTitle("下载进度");
myprogressbar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
myprogressbar.setMax(MAX);
myprogressbar.show();
new Thread(new Runnable() {
@Override
public void run() {
int progress= 0;
while (progress < MAX){
try {
Thread.sleep(100);
progress++;
myprogressbar.setProgress(progress);
} catch (InterruptedException e){
e.printStackTrace();
}
}
myprogressbar.cancel();
}
}).start();
}
private void sixDialog(){
final ProgressDialog waitingDialog= new ProgressDialog(DialogActivity.this);
waitingDialog.setTitle("等待对话框");
waitingDialog.setMessage("等待中...");
waitingDialog.setIndeterminate(true);
waitingDialog.setCancelable(true);
waitingDialog.show();
}
private void sevenDialog(){
final EditText editText = new EditText(DialogActivity.this);
AlertDialog.Builder inputDialog =
new AlertDialog.Builder(DialogActivity.this);
inputDialog.setTitle("编辑对话框").setView(editText);
inputDialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this,
editText.getText().toString(),
Toast.LENGTH_SHORT).show();
}
}).show();
}
}
前面一些基础的代码比如获取控件等等,我相信大家都应该知道吧!我讲讲主要的:
dailog1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
oneDialog();
}
});
dailog2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
twoDialog();
}
});
dailog3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
threeDialog();
}
});
dailog4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fourDialog();
}
});
dailog5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fiveDialog();
}
});
dailog6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sixDialog();
}
});
dailog7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sevenDialog();
}
});
在这里我绑定了7个监听器,然后每个里面都调用了一个方法,这个是java语法的基础,我就不多说了吧!所以每个对话框的关键代码在每个方法里面我们就一个一个地讲解吧!
●确定取消对话框
这个是最基本的一个对话框
在这里我们点击第一个Button可以看见弹出来一个对话框问你确定要离开吗?,下面有个“确定”按钮和“取消”按钮,点击“确定”按钮后下面有一个Toast提示你选择了确定,点击“取消”按钮后会弹出一个你选择了取消的Toast提示,我们来看看第一个按钮的监听事件调用了oneDialog()方法。
private void oneDialog(){
AlertDialog.Builder builder = newAlertDialog.Builder(DialogActivity.this);
builder.setTitle("你确定要离开吗?");
builder.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterfacedialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你选择了取消", Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你选择了确定", Toast.LENGTH_SHORT);
toast.show();
}
}) ;
builder.create().show();
}
看这几句代码,首先创建了AlertDialog.Builder的对象,就是builer(这里是可以自己修改对象的名字的,不一定是builder,学过java的都应该知道面向对象吧)这里的DialogActivity.this是一个Context对象,也就是这个Activity的名字。
builder.setTitle("你确定要离开吗?");
builder.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你选择了取消", Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你选择了确定", Toast.LENGTH_SHORT);
toast.show();
}
}) ;
这里调用了setTitle()方法和setPositiveButton()还有setNegativeButton()方法第一个是定义标题,后面两个方法是定义两个按钮,这两个方法里面的参数第一个Button显示的内容,比如确定和取消,然后后面是new一个监听器,,两个监听器里面都是打印一个Toast提示,这个对话框很简单吧!
最后
builder.create().show();
调用这个方法之后才会显示出对话框,如果忘了,对话框就不会出现哦!
●多个按钮对话框
我们先来看看效果吧!
在这里我们可以发现只是比上面一个对话框多了一个按钮还有按钮的内容变了,点击后的提示变了,我们来看一看第二个按钮的监听器调用了twoDialog()方法。
private void twoDialog(){
AlertDialog.Builder builder = newAlertDialog.Builder(DialogActivity.this);
builder.setTitle("投票");
builder.setMessage("你喜欢什么样的女生");
builder.setPositiveButton("可爱的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你喜欢可爱的", Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setNeutralButton("年轻的",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你喜欢年轻的", Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setNegativeButton("漂亮的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你喜欢漂亮的", Toast.LENGTH_SHORT);
toast.show();
}
}) ;
builder.create().show();
}
这里我们可以发现只是比上个对话的代码多调用了下面的方法
builder.setMessage("你喜欢什么样的女生");
还有多了个按钮
builder.setPositiveButton("可爱的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast=Toast.makeText(getApplicationContext(), "你喜欢可爱的", Toast.LENGTH_SHORT);
toast.show();
}
});
然后修改了提示信息,和按钮的名字,这个我就不多讲了吧!
●列表框
同样来看看效果
可以看出打开后弹出一个列表的对话框,点击哪一列会有一个显示点击那一列的信息,来看看方法
private void threeDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("列表选择框");
builder.setItems(Items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast toast = Toast.makeText(getApplicationContext(),"您选择的id为"+which+",列名为"+Items[which],Toast.LENGTH_SHORT);
toast.show();
}
});
builder.create().show();
}
这里看一看见这里和上面的对话框的差别是这里调用的是setItems()方法当然还有我上面定义的一个数组,因为下面的但子昂选择列表框也要用到,所以我没有定义在这个方法里面。
final String[]Items ={"one","two","three","four","five","six"};
就是这个数组,我们发现列表里面的信息就是用的这个数组里面的信息。
然后setItems()方法里面的第一个参数就是这个数组的名字Items
Toast toast = Toast.makeText(getApplicationContext(),"您选择的id为"+which+",
列名为"+Items[which],Toast.LENGTH_SHORT);
toast.show();
这个提示信息里面打印了一个id还有点击的那列的名字,这里有两个参数,一个是which就是每列独有的id,还有就是Items[which]就是数组里面根据id选择数组的第几个字符,打印出来,是不是还是很容易啊!
(在这里我还是要说一下,数组的id是从开始计算的)
●单项选择列表框
效果图
看见这里,我相信大家都应该很清楚了吧!跟上一个对话框没什么区别,只不过是把每列变成了单项选择按钮,来看代码吧!还是跟上面的一样从监听器里面看调用的方法,这里调用的方法是fourDialog()。
private void fourDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("单项选择框");
builder.setSingleChoiceItems(Items, 0, newDialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toasttoast = Toast.makeText(getApplicationContext(),
"您选择的id为"+which+",列名为"+Items[which],Toast.LENGTH_SHORT);
toast.show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface dialog, int which) {
}
}) ;
builder.create().show();
}
这里我们只需要看setSingleChoiceItems()方法,里面的第一个参数还是数组Items,第二个参数0是指开始默认选择id为0的按钮也就是one,然后就是new一个监听事件,里面是打印一个Toast提示,里面的参数上面一个对话框已经讲过了,我就不讲了,然后就是下面我添加了两个按钮,监听器里面没有写点击后实行哪些操作,这些你们可以自己去添加自己想要的操作,然后这个例子就讲完了,看下面一个例子吧!
●进度条对话框
效果图
这里可以看见点击按钮之后会出现一个进度条的对话框,进度条会自己加载,当满了之后对话框就会小时,我们来看下代码。
int MAX = 100;
private void fiveDialog(){
final ProgressDialog myprogressbar = new ProgressDialog(DialogActivity.this);
myprogressbar.setTitle("下载进度");
myprogressbar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
myprogressbar.setMax(MAX);
myprogressbar.show();
new Thread(new Runnable() {
@Override
public void run() {
int progress= 0;
while (progress < MAX){
try {
Thread.sleep(100);
progress++;
myprogressbar.setProgress(progress);
} catch (InterruptedException e){
e.printStackTrace();
}
}
myprogressbar.cancel();
}
}).start();
}
这里我们要注意了这里没有创建AlterDialog.Builer对象,而是ProgressDailog对象。
myprogressbar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
myprogressbar.setMax(MAX);
myprogressbar.show();
然后这里调用了这三个方法,这里是指,设置进度条的风格,还有设置进度的最大值,也就是进度条的长度
int MAX = 100;
我在上面设置MAX为100,而这里的最大值为MAX,也就是说最长为100,然后最后一句就是显示进度条也就是说打开对话框就会显示进度条。
new Thread(new Runnable() {
@Override
public void run() {
int progress= 0;
while (progress < MAX){
try {
Thread.sleep(100);
progress++;
myprogressbar.setProgress(progress);
} catch (InterruptedException e){
e.printStackTrace();
}
}
myprogressbar.cancel();
}
}).start();
然后就是new一个Thread对象来操控进度条自动加载的子线程,用了一个while语句来实现当进度条进度小于最大值进行自加的动作,当这个值到最大也就是MAX的时候调用cancel()方法,也就是对话框消失。
●等待对话框
效果图
我相信这种对话框大家就很常见了吧!
我们来看看代码
private void sixDialog(){
final ProgressDailog waitingDialog= new ProgressDialog(DialogActivity.this);
waitingDialog.setTitle("等待对话框");
waitingDialog.setMessage("等待中...");
waitingDialog.setIndeterminate(true);
waitingDialog.setCancelable(true);
waitingDialog.show();
}
这里主要讲下这个方法吧!而且这里也是ProgressDialog对象。
waitingDialog.setCancelable(true);
这个方法主要作用是当你点击屏幕的时候对话框就会消失,当你把括号里面的true编程false的时候就是当你点击屏幕的时候无法取消对话框,除非等进程结束,而我这里没有设置进程什么时候结束,所以你不点击屏幕对话框也就不会消失。
●编辑对话框
效果图
从这个效果图中我们看见要实现的功能就是点击按钮之后出现一个可以输入字符的编辑框的对话框,然后有一个确定按钮,点击确定按钮之后就会用Toast提示打印出你输入的内容,我们来看一下代码吧!首先这里要在布局文件里面添加一个EditText控件。
XML布局文件里添加EditText控件:
<EditText
android:layout_marginTop="500dp"
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="50dp" />
然后是java代码:
private void sevenDialog(){
final EditText editText = new EditText(DialogActivity.this);
AlertDialog.BuilderinputDialog =new AlertDialog.Builder(DialogActivity.this);
inputDialog.setTitle("编辑对话框").setView(editText);
inputDialog.setPositiveButton("确定",
newDialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this,
editText.getText().toString(),
Toast.LENGTH_SHORT).show();
}
}).show();
}
这里我们先声明EditText控件后面括号里面的是Activity的名字,如下面的代码
final EditText editText = newEditText(DialogActivity.this);
这里是用了final的,大家注意。
AlertDialog.Builder inputDialog =
newAlertDialog.Builder(DialogActivity.this);
然后这里是创建一个对象,还是和前面的一样用到的是Alter.Bulier对象
Toast.makeText(DialogActivity.this,
editText.getText().toString(),
Toast.LENGTH_SHORT).show();
这里的editText.getText().toString()方法就是获取输入框里的值。然后打印出来。这个例子还是很简单吧!
好了这7种对话框的使用方法我都讲完了,我们下次再会。
推荐阅读
-
Android开发之基于DialogFragment创建对话框的方法示例
-
Android 开发之Dialog,Toast,Snackbar提醒
-
Android开发笔记之:Dialog的使用详解
-
Android开发基础之创建启动界面Splash Screen的方法
-
Android基础之Dialog,通用属性设置
-
Android开发实现模仿微信小窗口功能【Dialog对话框风格窗口】
-
Android开发之DatePickerDialog、TimePickerDialog时间日期对话框用法示例
-
Android开发之ProgressDialog进度对话框用法示例
-
Android开发之PopupWindow创建弹窗、对话框的方法详解
-
Android开发基础之网络请求实例