您的位置:首页 > 其它

AlertDialog的种类和使用方法

2016-07-28 13:28 387 查看
<本文章仅作学习的笔记的目的,可能会有参考冲突与错误,请见谅。>

AlertDialog可以在当前页面里弹出一个对话框,它可以屏蔽其他UI控件的交互能力,以起到警示的作用,所以在实际设计时dialog会作为重要信息提示作用而存在。

dialog有以下几种形式:简单对话框,列表对话框,单选对话框,多选对话框,自定义对话框等。

1.简单对话框

Button dig=(Button)findViewById(R.id.dig1);
dig.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
//创建Alert builder对象

dix.setIcon(R.mipmap.ic_launcher); //设置图标

dix.setTitle("对话框");            //设置标题

dix.setMessage("这是一个对话框");   //设置内容
dix.setPositiveButton("进入界面", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//在此添加逻辑
}
});
//确定方面事件响应
dix.setNegativeButton("残忍的离开", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
});                      //取消方面事件响应
dix.show();
//显示出对话框
}
});
}


步骤具体为:a:创建 AlertDialog.Builder实例

b:设置实例的一些属性

c:设置positive与negetive的监听

d:show(),显示

当显示对话框后整个界面会被屏蔽,UI控件将无法使用。

2.列表对话框

Button listdialog =(Button)findViewById(R.id.listdialog);
listdialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组

AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
//创建Alert builder对象
dix.setIcon(R.mipmap.ic_launcher);    //设置图标
dix.setTitle("选择编程语言");           //设置标题

dix.setItems(arr, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(Activity14.this,"选择了"+arr[which],Toast.LENGTH_SHORT).show();
}
});   //传入arr,并且设置监听器

dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
});                   //确定方面事件响应
dix.show();
}
});


实现步骤:1.final一个数组作为列表项

2.获取实例(同简单对话框),配置标题,图标等

3.配置ITEM,传入数组,设置监听器,在监听器里设置事件

4.显示对话框

3.单选对话框

Button singlechoose=(Button)findViewById(R.id.singlechoose);
singlechoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组
AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
//创建Alert builder对象
dix.setIcon(R.mipmap.ic_launcher);    //设置图标
dix.setTitle("选择编程语言");           //设置标题
dix.setSingleChoiceItems(arr, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedId=which;
Toast.makeText(Activity14.this,"选择了"+arr[which],Toast.LENGTH_SHORT).show();

}
});
dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(Activity14.this,"最终选择了"+arr[selectedId],Toast.LENGTH_SHORT).show();
}
});                   //确定方面事件响应
dix.show();
}
});


实现步骤:1.为了记录用户选择,我们需要在最外层添加 private int selectedId=0;

2.获取实例(同简单对话框),配置标题,图标等

3.配置singlechoiceitems,传入数组,设置默认选择为数组第0项,设置监听器,在监听器里设置事件

4.我们用int变量记录下最终的选择,传递给确定按钮

5.显示对话框

4.多选对话框

Button chooses=(Button)findViewById(R.id.chooses);
chooses.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组
chooselist.clear();

fc96
AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
//创建Alert builder对象
dix.setIcon(R.mipmap.ic_launcher);    //设置图标
dix.setTitle("选择编程语言");           //设置标题
dix.setMultiChoiceItems(arr, new boolean[]{false, false, false,false, false, false}, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if(isChecked){
chooselist.add(which);
}
else{
chooselist.remove(which);
}
Toast.makeText(Activity14.this,"用户的选择"+chooselist.toString(),Toast.LENGTH_SHORT).show();
}
});     //设置多选,传入数组,默认选择值,是否选中的逻辑  (如果选中,在数组里添加选项,如果没选中就移除选项)
dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//最后的toast提示,使用了tostring方法。
Toast.makeText(Activity14.this,"最终选择了"+chooselist.toString(),Toast.LENGTH_SHORT).show();
}
});                   //确定方面事件响应
dix.show();
}
});


实现步骤:1.为了记录用户选择,我们需要在代码开始添加 ArrayList chooselist=new ArrayList()用来储存用户选项;

2.获取实例(同简单对话框),配置标题,图标等

3.配置setMultiChoiceItems,传入数组,设置默认选择为全部false,设置监听器,在监听器里设置事件,监听器里的ischecked用来做判断

如果选中,则在数组里动态添加,如果没选中,则移除。

4.使用tostring方法提示选择。

5.显示对话框

5.自定义对话框

Java代码
public void bteClick(View v)
{
LayoutInflater layoutInflater=LayoutInflater.from(this);    //设置反射器
View my=layoutInflater.inflate(R.layout.layout_myself_dialog,null);
//创建反射器视图my,(采用了反射器的inflate方法)
AlertDialog.Builder builder=new AlertDialog.Builder(this);
//创建对话框实例
builder.setView(my);
//设置好视图
my.findViewById(R.id.btx).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dia.dismiss();
}
});

my.findViewById(R.id.btx2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dia.dismiss();
}
});
//获取按钮对象,设置监听
dia=builder.create();    //显示出来
dia.show();
}


实现步骤:1.首先在点击弹出dialog的button的xml属性上添加

android:onClick=”bteClick”属性

2.为onclick属性添加逻辑

设置反射器,创建反射器视图,创建对话框实例然后设置视图,为视图上的按钮添加响应(这里不用使用button获取实例,而是直接把视图当作按钮看待,设置dismiss方法使对话框消失)

3.最后将对话框显示出来

自定义对话框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="vertical"

>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#ffffff"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:text="音乐闹钟"
android:textSize="18sp"
android:textColor="#000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.95" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

android:gravity="center"
android:orientation="vertical"
android:padding="10dp"
>

</LinearLayout>

<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/timePicker"
android:layerType="software"
android:layout_gravity="center_horizontal"
/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="right"
android:orientation="horizontal"

android:weightSum="1">

<Button
android:id="@+id/btx2"
android:text="                                                取消"
android:textColor="#558544"
android:textSize="15sp"
android:background="#ffffff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_weight="0.99" />

<Button
android:id="@+id/btx"
android:text="确定"
android:textColor="#558544"
android:textSize="15sp"
android:background="#ffffff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp" />
</LinearLayout>

</LinearLayout>


上面是模仿网易云音乐的音乐闹钟界面,我们可以添加获取时间的方法来做成闹钟的应用。

以上为基本对话框,另外还有时间,日期选择功能的对话框和进度对话框,下面是用线程来模拟登录的例子,其中用到了对话框

package com.example.a22345.life;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
* Created by 22345 on 2016/7/25.
*/
public class Activity13 extends Activity {
ProgressDialog pd;
//进度框实例
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity13);

//本篇为登录内容
final EditText editText=(EditText)findViewById(R.id.passwordx);
final AutoCompleteTextView autoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.emailx);
Button button=(Button)findViewById(R.id.sign_in);
//以上3步为获取xml布局上的实例
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email=editText.getText().toString();
//获取输入的帐号内容,并转换为字符串
String  pswd=autoCompleteTextView.getText().toString();
//获取输入的密码内容,并转换为字符串
if(email.equals("1")&&pswd.equals("1"))
{                        //判读是否可以通过
Dialog();
//上面是显示dialog
//两者同时运行,但是线程不一样
//下面是新建子线程
new Thread(){
public void run() {    //人为制造的for循环耗时操作效果(Sleep)
for (int i = 0; i < 4; i++) {
try {
Thread.sleep(1000);    //强制停顿1s
} catch (InterruptedException e) {
e.printStackTrace();
}
}
handler.sendEmptyMessage(0);    //子线程给主线程发送消息
}
}.start();
//启动线程

}
else if(email.equals("")&&email.equals(""))
{
Toast.makeText(Activity13.this,"宝宝没有发现你没有输入帐号或者密码!",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Activity13.this,"帐号或者密码错误啦!",Toast.LENGTH_SHORT).show();
}                   //否则就提出错误提醒
}
});
//以上为设置button监听器

}

Handler handler=new Handler()         //存在于UI主线程里的handler
{
@Override
public void handleMessage(Message msg){
pd.dismiss();            //控制主线程里的pd消失
Intent intent=new Intent(Activity13.this,Activity14.class);
startActivity(intent);    //新的活动被打开
finish();                 //旧的活动结束
}

};
public void Dialog()
{
pd=new ProgressDialog(this);
pd.setIcon(R.mipmap.ic_launcher);   //图标
pd.setTitle("正在登录");           //题目
pd.setMessage("请稍后……");      //内容
pd.setCancelable(true);      //可取消
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);    //圆形
pd.show();       //显示
}
}                          //设置dialog方法,用来显示对话框


分析:1.UI主线程正在运行,输入帐号密码后,通过gettext获取输入内容,用equal方法判断,并提供未输入或者输入错误的提示

2.当输入正确后,启动dialog进度框,并同时启动子线程,此时两个线程分别走不同的线路,子线程所执行的操作就是sleep()延时效果,

通过for循环延时4s,最后由handler发出命令,回传给handler里的方法,执行方法达到进度框消失,新活动启动,旧活动销毁的效果

进度框会在4s后消失,并打开新的活动

2016.7.25  19:38 Surine
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对话框 控件 设计