Android实现“是否退出”对话框和“带图标的列表”对话框
今天我们学习的内容是实现两种对话框(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实现“是否退出”对话框和“带图标的列表”对话框的更多相关文章
- CIconListBox带图标的列表框类
有时候,我们需要在列表框ListBox中插入带图标的文字项,这就需要自己派生一个类出来了,网上的一个CIconListBox类还不错,网站http://www.codeguru.com/Cpp/con ...
- 025 Android 带进度条的对话框(ProgressDialog)
1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...
- Android 自带图标库 android.R.drawable
在xml文件中调用. android:title="@string/secure_connect"android:orderInCategory="100"an ...
- Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解
对话框就是一个AlertDialog,但是一个简单的AlertDialog,我们却可以将它玩出许多花样来,下面我们就来一起总结一下AlertDialog的用法.看看各位童鞋在平时的工作中否都用到了Al ...
- Android开源项目——带图标文字的底部导航栏IconTabPageIndicator
接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译 ...
- Android 自定义AlertDialog退出对话框
Android 自定义AlertDialog退出对话框 转 https://blog.csdn.net/wkh11/article/details/53081634在项目中很多时候会出现点击返回键出现 ...
- Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)
目录 一.提示信息对话框: 二.单选对话框: 三.多选对话框: 四.自定义对话框: 演示项目完整代码: 一.提示信息对话框: //显示提示消息对话框 private void showMsgDialo ...
- 【传】玩转Android---UI篇---ImageButton(带图标的按钮)
原文网址:http://hualang.iteye.com/blog/964049 除了Android系统自带的Button按钮一万,还提供了带图标的按钮ImageButton 要制作带图标的按钮,首 ...
- Android开发 ---构建对话框Builder对象,消息提示框、列表对话框、单选提示框、多选提示框、日期/时间对话框、进度条对话框、自定义对话框、投影
效果图: 1.activity_main.xml 描述: a.定义了一个消息提示框按钮 点击按钮弹出消息 b.定义了一个选择城市的输入框 点击按钮选择城市 c.定义了一个单选提示框按钮 点击按钮选择某 ...
随机推荐
- Objective-C该Protocol
Objective-C该Protocol Protocol 简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现,这样的模式一般称为(delegation)模式 在iOS中和OS X中,A ...
- smark和openfire即时通信代码
从:http://blog.csdn.net/casuallc/article/details/34794501 server:openfire client计划:smark写 首先安装openfir ...
- 开销是有益的:AppCan 至HTML5移动创新和创业精神和健康
2014年移动创业更趋向理性,消费级App市场接近饱和,BAT等巨头的竞争更加激烈,市场版图及格局基本定型.而企业级移动应用却迎来爆发增长,替代进入红海的消费级App市场,企业级定制APP开发成为 ...
- 【Shell剧本练习】得出的结论是当前用户
推断是否当前用户root.假设是暗示root用户,假设而不是提示对于普通用户 #!/bin/bash #title: testus.sh #author: orangleliu #date: 2014 ...
- HDU4540+DP
简单题... dp[ i ][ j ] 表示第 i 行取第 j 个数的MinVal /* DP&简单题 */ #include<stdio.h> #include<strin ...
- Oracle listener lsnrctl
lsnrctl(Listener Control)是一家SQL*Net具,用于控制数据库listener,此工具提供了控制命令listener开端.停止,查看listener状态,更改listener ...
- Team Services and Team Foundation Server官方资料入口
Team Foundation Server msdn 中文文档入口 Team Services or Team Foundation Server www.visualstudio.com 英文文档 ...
- C++ tree(1)
建立与基本操作 .有关二叉树的相关概念,这里不再赘述,假设不了解二叉树相关概念,建议先学习数据结构中的二叉树的知识点 准备数据 定义二叉树结构操作中须要用到的变量及数据等. #define MAXLE ...
- C和指针 (pointers on C)——第十章:结构和联合(下一个)锻炼
//1.本章只为了刷存在演习.. . typedef struct phone { char * quhao; char * jiaohuantai; char * zhanhaoma; }; typ ...
- C# Socket TCP Server & Client & nodejs client
要调试公司某项目里的一个功能,因为要准备测试环境,趁这个机会重温了一下Socket(全还给老师了 -_-#),做个备份. C# Server static void Main(string[] arg ...