今天我们学习的内容是实现两种对话框(Dialog),第一种是询问是否退出对话框,另外一种是带图标的列表对话框,程序的执行效果是,我们点击button1的时候,弹出第一种对话框,我们点击button2的时候,弹出另外一种对话框。

(1)  首先是布局方面,有三个xml文件,一个是Activity的布局文件,一个是Dialog的布局文件,一个是ListView的布局文件,内容分别例如以下:

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"> <Button android:id="@+id/exit_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="对话框1"/> <Button android:id="@+id/list_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="对话框2"/> </LinearLayout>

dialog_list.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" > <ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000" >
</ListView> </LinearLayout>

items.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="horizontal" > <ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxHeight="72px"
android:maxWidth="72px"
android:paddingBottom="20px"
android:paddingLeft="10px"
android:paddingTop="20px" /> <TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10px" /> </LinearLayout>

(2)然后就Java代码部分,代码部分关于dialog我已经具体凝视,具体请看:

package com.example.dialogdemo;

import java.util.ArrayList;
import java.util.HashMap; import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends Activity { //定义两个静态字符串
private static final String DIALOG_ICON = "icon";
private static final String DIALOG_TITLE = "title"; //声明Button类型的变量button1
private Button button1; //声明Button类型的变量button2
private Button button2; //声明View类型的变量view
private View view; //声明ListView类型的变量listView
private ListView listView; //声明一个ArrayList变量mList,它里面的item都是HashMap类型
private ArrayList<HashMap<String, Object>> mList; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initData();
setupViews();
} /**
* 初始化数据
*/
private void initData(){
//初始化mList
if(mList == null){
mList = new ArrayList<HashMap<String,Object>>();
}else{
mList.clear();
} //向mList里面加入数据
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(DIALOG_ICON, R.drawable.img01);
map.put(DIALOG_TITLE, "程序管理");
mList.add(map); map = new HashMap<String, Object>();
map.put(DIALOG_ICON, R.drawable.img02);
map.put(DIALOG_TITLE, "保密设置");
mList.add(map); map = new HashMap<String, Object>();
map.put(DIALOG_ICON, R.drawable.img03);
map.put(DIALOG_TITLE, "安全设置");
mList.add(map); map = new HashMap<String, Object>();
map.put(DIALOG_ICON, R.drawable.img04);
map.put(DIALOG_TITLE, "邮件设置");
mList.add(map); map = new HashMap<String, Object>();
map.put(DIALOG_ICON, R.drawable.img05);
map.put(DIALOG_TITLE, "铃声设置");
mList.add(map);
} /**
* 初始化视图
*/
private void setupViews(){
LayoutInflater inflater = LayoutInflater.from(MainActivity.this); view = inflater.inflate(R.layout.dialog_list, null);
listView = (ListView) view.findViewById(R.id.listview); DialogListViewAdapter adapter = new DialogListViewAdapter(); listView.setAdapter(adapter); //通过findviewbyid()获取Button对象
button1 = (Button) findViewById(R.id.exit_button);
button2 = (Button) findViewById(R.id.list_button); //为button1设置点击监听器
button1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
//初始化一个AlertDialog对象
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //为dialog设置图标
alertDialog.setIcon(getResources().getDrawable(R.drawable.advise)); //为dialog设置标题
alertDialog.setTitle("退出?"); //为dialog设置主体内容
alertDialog.setMessage("是否真的要退出当前应用?"); //为dialog设置一个按钮
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "不退出", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub }
}); //为dialog设置还有一个按钮
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "是的", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
MainActivity.this.finish();
}
}); //显示dialog
alertDialog.show();
}
}); //为button2设置点击监听器
button2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
//初始化一个AlertDialog
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //为alertDialog设置视图
alertDialog.setView(view); //显示alertDialog
alertDialog.show();
}
});
} /**
* 定义ListView的Adapter,其作用是为ListView视图提供数据
*/
class DialogListViewAdapter extends BaseAdapter{ @Override
public int getCount() {
return mList.size();
} @Override
public Object getItem(int position) {
return mList.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ListViewItemHolder holder; if(convertView == null){
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.items, null);
holder = new ListViewItemHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.image);
holder.textView = (TextView) convertView.findViewById(R.id.title); convertView.setTag(holder);
}else{
holder = (ListViewItemHolder) convertView.getTag();
} HashMap<String, Object> map = mList.get(position);
int iconId = (Integer) map.get(DIALOG_ICON);
String title = (String) map.get(DIALOG_TITLE);
holder.imageView.setImageResource(iconId);
holder.textView.setText(title); return convertView;
} } //两个视图控件的一个封装类
class ListViewItemHolder{
ImageView imageView;
TextView textView;
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}

(3)执行一下android project,效果图例如以下:

最后附上源代码下载地址:

Android对话框(dialog)实例

Android实现“是否退出”对话框和“带图标的列表”对话框的更多相关文章

  1. CIconListBox带图标的列表框类

    有时候,我们需要在列表框ListBox中插入带图标的文字项,这就需要自己派生一个类出来了,网上的一个CIconListBox类还不错,网站http://www.codeguru.com/Cpp/con ...

  2. 025 Android 带进度条的对话框(ProgressDialog)

    1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...

  3. Android 自带图标库 android.R.drawable

    在xml文件中调用. android:title="@string/secure_connect"android:orderInCategory="100"an ...

  4. Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解

    对话框就是一个AlertDialog,但是一个简单的AlertDialog,我们却可以将它玩出许多花样来,下面我们就来一起总结一下AlertDialog的用法.看看各位童鞋在平时的工作中否都用到了Al ...

  5. Android开源项目——带图标文字的底部导航栏IconTabPageIndicator

    接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译 ...

  6. Android 自定义AlertDialog退出对话框

    Android 自定义AlertDialog退出对话框 转 https://blog.csdn.net/wkh11/article/details/53081634在项目中很多时候会出现点击返回键出现 ...

  7. Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)

    目录 一.提示信息对话框: 二.单选对话框: 三.多选对话框: 四.自定义对话框: 演示项目完整代码: 一.提示信息对话框: //显示提示消息对话框 private void showMsgDialo ...

  8. 【传】玩转Android---UI篇---ImageButton(带图标的按钮)

    原文网址:http://hualang.iteye.com/blog/964049 除了Android系统自带的Button按钮一万,还提供了带图标的按钮ImageButton 要制作带图标的按钮,首 ...

  9. Android开发 ---构建对话框Builder对象,消息提示框、列表对话框、单选提示框、多选提示框、日期/时间对话框、进度条对话框、自定义对话框、投影

    效果图: 1.activity_main.xml 描述: a.定义了一个消息提示框按钮 点击按钮弹出消息 b.定义了一个选择城市的输入框 点击按钮选择城市 c.定义了一个单选提示框按钮 点击按钮选择某 ...

随机推荐

  1. 一个vbs文件将指定文件夹下的文件名输出到指定文件夹下

    'on error resume NextConst MY_COMPUTER=&H11& Const WINDOW_HANDLE=0 Const OPTIONS=0 '设置我的电脑为根 ...

  2. cocos2d-x 3.1.1 学习笔记[21]cocos2d-x 创建过程

    文章出自于  http://blog.csdn.net/zhouyunxuan RootViewController.h #import <UIKit/UIKit.h> @interfac ...

  3. MVC5

    MVC5 不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的 ...

  4. 2015西雅图微软总部MVP峰会

    2015 西雅图微软总部MVP峰会记录   2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一 ...

  5. 【转】Android内存机制分析2——分析APP内存使用情况

    上面一篇文章说了Android应用运行在dalvik里面分配的堆和栈内存区别,以及程序中什么代码会在哪里运行.今天主要是讲解一下Android里面如何分析我们程序内存使用情况.以便后续可以分析我们程序 ...

  6. Sphinx/Coreseek 4.1 跑 buildconf.sh 一个错误,无法生成configure档

    安装前 coorseek 什么时候,遇到一些错误.该官方网站无法看到的解决方案,终于 google 在大牛的博客评论区找到一个解决方案.突然跑到他的膝盖介绍~~ 这里整理是为了方便一些人发现,墙毕竟让 ...

  7. 命令模式 & 策略模式 & 模板方法

    一.策略模式 策略模式:封装易变化的算法,可互相替换. GoF<设计模式>中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换.该模式使得算法可独立于它们的客户变化. 比如 ...

  8. Python网络01 原始Python服务器

    原文:Python网络01 原始Python服务器 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人 ...

  9. Linux服务器杀马(转)

    开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...

  10. NSIS:获取硬盘中容量最大的分区盘符

    原文 NSIS:获取硬盘中容量最大的分区盘符 我们在安装一些在线视频软件比如迅雷看看时,会发现他们的安装程序会自动判断当前系统中容量最大的分区,以便在其中创建数据缓冲下载的文件夹,这种功能如果实现呢, ...