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.定义了一个单选提示框按钮 点击按钮选择某 ...
随机推荐
- telnet发电子邮件
无聊今天的工作,想想一个学生被提到最后一次telnet发电子邮件,所以我想试试.最后,成功的实践,这里做个总结. 首先,cmd进telnet打开回话: 下面红色字体为命令. 1.open smtp.1 ...
- 读书时间《JavaScript高级程序设计》四:BOM,客户端检测
隔了一段时间,现在开始看第8章. 第8章:BOM BOM提供了很多对象,用于访问浏览器的功能.BOM的核心对象是window,它表示浏览器的一个实例. window对象是通过javascript访问浏 ...
- 在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON
SwiftyJSON能够让在Swift语言中更加简便处理JSON数据. With SwiftyJSON all you have to do is: ? 1 2 3 4 let json = JSON ...
- Cocos2d-X 使用CCTableView创建滚动视图
CCTableView和CCScrollView如创建滚动视图,CCTableView该函数将是更,制造更多麻烦 实例1:使用CCTableView创建滚动视图 首先创建一个TableView类 Ta ...
- Cocos2d-x 3.0final 终结者系列教程04-引擎架构分析
从前,有一个跟我来Android学生,总是问我: 沉老师,为什么Android的形式被称为Activity,为什么要onCreate方法写setContentView(R.layout.main)? ...
- Effective C++:规定27:尽量少做动作的过渡
(一个)C风格遗留转换: (T)expression T(expression) (二)C++提供四种新式转型: (1)const_cast<T>(expression):去除表达式的常量 ...
- JAVA 跑马灯文字效果
JAVA跑马灯文字效果的实现: 1. 首先创建一个继承JFrame类的HorseRaceLightTextFrame窗体类,代码如下: package com.example.horseracelig ...
- UVa 208 - Firetruck 回溯+剪枝 数据
题意:构造出一张图,给出一个点,字典序输出所有从1到该点的路径. 裸搜会超时的题目,其实题目的数据特地设计得让图稠密但起点和终点却不相连,所以直接搜索过去会超时. 只要判断下起点和终点能不能相连就行了 ...
- Android WebView坑摘要
要抓好近期iPad HybridApp至Android举,坑遇到太多.让我折腾过Android临近4在退伍军人头痛! 今天前者被列出,以满足,然后慢慢自己解决.现在,它已经解决android键盘覆盖问 ...
- Spring相框:AOP详细说明
AOP中国的名字叫做面向方面编程.这个名字是很形象.因为你真的可以把像面包切系统.并直接增加面包的修改.科而异,对整个系统,小到一定的方法. AOP它有什么用?有关示例,各组分可以含有安全.事务.,A ...