今天我们学习的内容是实现两种对话框(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. LINK : fatal error LNK1181: 无法打开输入文件“..\..\lib\Release\opencv_ocl249.lib”

    最近想要编译什么OpenCV资源.查看源代码调试执行. 按照网上的文章<Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV> 进行配 ...

  2. RH033读书笔记(12)-Lab 13 Finding and Processing Files

    Sequence 1: Using find Scenario: Log in as user student. Devise and execute a find command that prod ...

  3. 【网络流量最大流量】poj3281Dining

    /* EK算法版本号,哦,慢.....见下文dinic版本号 ----------------------------------------- 最大的问题是网络流量问题 -------------- ...

  4. web即时通讯2--基于Spring websocket达到web聊天室

    如本文所用,Spring4和websocket要构建web聊天室,根据框架SpringMVC+Spring+Hibernate的Maven项目,后台使用spring websocket进行消息转发和聊 ...

  5. Win10使用中的一些问题

    闲来无事,怒装Win10.使用上总体来说还是不错的,比Win8好一个档次吧. 不过呢在使用中遇到两个很郁闷的问题.权且几下 1.Win10激活 使用工具:激活工具 2.激活后浏览器被挟持 这让我现在非 ...

  6. LeetCode之Sort List

    称号:Sort a linked list in O(n log n) time using constant space complexity. 对一个单链表进行排序,要求时间复杂度为O(n log ...

  7. 学习vi和vim编辑(3):一个简单的文本编辑器(2)

    然后文章,继续评论vi编辑简单的文本编辑命令. 本文主要是删除的文字.复制,运动命令. 删除文本: 正如上一篇文章中讲过的,对于删除命令("d")也具有"(command ...

  8. hdoj 2063 过山车 【双边匹配匈牙利算法】

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  9. 王立平--Button底,点击效果设置

    1.新....xml <? xml version="1.0" encoding="utf-8"?>        <selector xml ...

  10. Android中部署自己的su

    本人博客原文 首先把你的自己的su的放到Android应用程序project的assets文件夹,为了和系统的su区分,我自己的su文件叫做sur. 另外我这里没有考虑x86架构的cpu的手机. 废话 ...