开发步骤如下:(1)布局界面(2)获取按钮,添加事件监听器,实现对话框 。
我采用的是RelativeLayout布局和LinearLayout两个布局,自定义对话框用的是用的是在Layout下创建的LinearLayout布局,其余对话框用的是默认的RelativeLayout布局。
第一步,点击File->New ->New Module,创建一个项目模块,在activity_main.xml目录下,设计五个基本按钮,布局代码如上图所示,可以直接在设计界面用鼠标拖动按钮,移动按钮的位置,代码会自动生成,可以在activity_main.xml目录下修改按钮名称,也可以双击按钮修改。这样按钮的布局便做好了,还是很简单的。
下面我们先看布局文件,RelativeLayout布局,源代码如下,
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.nuist__njupt.dialoddemo.MainActivity">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:text="" />
<View
android:id="@+id/line"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="确定【取消】对话框"
android:layout_alignRight="@+id/title"
android:layout_alignEnd="@+id/title" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="简单列表对话框"
android:layout_below="@+id/title"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="22dp" />
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="单选列表对话框"
android:layout_below="@+id/button2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="多选列表对话框"
android:layout_below="@+id/button3"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="自定义VIEW对话框"
android:layout_below="@+id/button4"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
下面的是在Layout下创建的LinearLayout布局,在布局文件下布局如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
第二步,在MainActivity文件夹下,获取按钮,添加事件监听器并实现对话框 。(注:我的代码呈上,你可以拿去用,如果出现报错,记得点击Alt+Enter会对你有帮助的)
(1)带取消和确定按钮的对话框,源代码如下,把此方法用在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为apple的图片粘贴到res文件的drawable目录下。
// author Wangguodong
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//显示带取消和确定按钮的对话框
Button button1 = (Button) findViewById(R.id.button1) ;
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建对话框对象,并实例化
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setIcon(R.drawable.apple); //引用图标
alertDialog.setTitle("乔布斯:"); //设置标题
alertDialog.setMessage("活着就是为了改变世界,难道还有什么其它原因吗?");//设置内容信息
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "否", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "您单击了否按钮", Toast.LENGTH_SHORT).show();
}
}); //取消按钮
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "是", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "您单击了是按钮", Toast.LENGTH_SHORT).show();
}
});//确定按钮
alertDialog.show();
}
}) ;
(2)简单列表对话框,源代码如下,已在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为like的图片粘贴到res文件的drawable目录下。
// 显示列表对话框
Button button2 = (Button) findViewById(R.id.button2) ;
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//带多个列表项的列表对话框
final String [] s = new String [] {"求知若饥,虚心若愚","或者就是为了改变世界",
"当你有使命,它会让你变得更专注","要么出众,要么出局"} ; //数组中存放四个列表项
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ; // 创建一个AlertDialog.Builder对象
builder.setIcon(R.drawable.like) ; //引用图标
builder.setTitle("请您选择下面四句话中你最喜欢的一句话");
builder.setItems(s, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "您选择了【" + s[which] + "】", Toast.LENGTH_SHORT).show();
}
}) ;//确定列表项
builder.create().show() ; //创建并显示对话框
}
}) ;
(3)单选列表对话框,源代码如下,已在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为select的图片粘贴到res文件的drawable目录下。
//显示单选对话框
Button button3 = (Button) findViewById(R.id.button3) ;
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建带列表项的对话框
final String [] s = new String[] {"比尔盖茨","乔布斯","扎克伯格","马云","马化腾"} ;
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ; // 创建一个AlertDialog.Builder对象
builder.setIcon(R.drawable.select) ; //引用图标
builder.setTitle("您最喜欢下面哪位大佬呢") ;//设置标题
builder.setSingleChoiceItems(s, 0, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "您选择了【" + s[which] + "】", Toast.LENGTH_SHORT).show();
}
}) ; //添加列表项
builder.setPositiveButton("确定", null) ; //创建确定按钮,并默认不做处理
builder.create().show() ;
}
}) ;
(4)多选列表对话框,源代码如下,已在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为eat的图片粘贴到res文件的drawable目录下。
//显示多选对话框
Button button4 = (Button) findViewById(R.id.button4) ;
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建带多选项的对话框
final boolean [] checkItems = new boolean[]{false,true,false,true,false} ; //记录列表项的状态
final String [] s = new String [] {"王者荣耀","和平精英","英雄联盟","穿越火线","地下城与勇士"} ;//显示列表项的内容
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ; // 创建一个AlertDialog.Builder对象
builder.setIcon(R.drawable.eat) ; //引用图标
builder.setTitle("请您选择你最喜欢的游戏") ;//设置标题
builder.setMultiChoiceItems(s, checkItems, new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkItems[which] = isChecked; //根据列表选项被操作然后改变状态
}
}) ; //添加的列表项
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String result = ""; //用于记录最终的结果
for (int i = 0; i < checkItems.length; i++) {
if (checkItems[i]) {
result += s[i];
}
}
if (!"".equals(result)) { //判断如果选择的值不为空则输出
Toast.makeText(MainActivity.this, "您选择了【" + result + "】", Toast.LENGTH_SHORT).show();
}
}
}) ; //添加确定按钮
builder.create().show() ;
}
}) ;
(5)自定义对话框,源代码如下,已在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为girl的图片粘贴到res文件的drawable目录下。
//显示自定义对话框
Button button5 = (Button) findViewById(R.id.button5);
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ; // 创建一个AlertDialog.Builder对象
builder.setIcon(R.drawable.girl) ; //引用图标
builder.setTitle("自定义的对话框") ;//设置标题
final View dialogView = LayoutInflater.from(MainActivity.this)
.inflate(R.layout.layout,null);
builder.setView(dialogView) ; //设置视图
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 获取EditView中的输入内容
EditText edit_text =
(EditText) dialogView.findViewById(R.id.edit_text);
Toast.makeText(MainActivity.this,
edit_text.getText().toString(),
Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
}) ;
最后一步,在模拟器上调试,结果如下图所示。