对话框就是一般的弹出窗口,主要用来提示用户,和用户交互。

 

创建Activity对话框

使用Activity模拟对话框。这个比较简单,主要是使用Activity自带的Dialog主题。

 

创建DialogActivity,并在AndroidManifest中注册。

改变DialogActivity的主题:

<activity
android:theme="@android:style/Theme.Dialog"
android:name="com.whathecode.usingdialog.DialogActivity"
android:label="@string/title_activity_dialog" >
</activity>

 

DialogActivity代码示例:

package com.whathecode.usingdialog;

import android.app.Activity;
import android.os.Bundle;
import android.view.View; public class DialogActivity extends Activity
{ @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
} //用来关闭这个Activity
public void close(View view)
{
finish();
}
}

 

DialogActivity布局文件:

<LinearLayout 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:padding="5dp"
android:orientation="vertical"
android:gravity="center_vertical|center_horizontal"
tools:context=".DialogActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是基于Activity的Dialog" /> <LinearLayout
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"> <Button
android:id="@+id/confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定"
android:onClick="close"/> <Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"
android:onClick="close"/>
</LinearLayout> </LinearLayout>

 

MainActivity代码:

package com.whathecode.usingdialog;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View; public class MainActivity extends FragmentActivity
{ @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void openActivityDialog(View view)
{
Intent intent = new Intent(this, DialogActivity.class);
startActivity(intent);
}
}

 

运行效果:

 

创建单选,多选和带进度条的对话框:

主要是使用AlertDialog类,首先通过创建AlertDialog类的实例,然后使用showDialog显示对话框。

showDialog方法的执行会引发onCreateDialog方法被调用

示例代码:

package com.whathecode.usingdialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Toast; public class MainActivity extends Activity
{ private static final int SINGLE_CHOICE_DIALOG = 0;
private static final int MULTI_CHOICE_DIALOG = 1;
private static final int PROGRESS_DIALOG = 2;
protected static final int MAX_PROGRESS = 30;
private CharSequence items[] = new String[] { "apple", "google",
"microsoft" };
private boolean checkedItems[] = new boolean[3]; private Handler progressHandler;
private int progress;
protected ProgressDialog progressDialog; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); progressHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (progress >= MAX_PROGRESS) {
progressDialog.dismiss(); //关闭progressDialog
} else {
progress++; //进度条加1
progressDialog.incrementProgressBy(1);
//只要当前进度小于总进度,每个100毫秒发送一次消息
progressHandler.sendEmptyMessageDelayed(0, 100);
}
}
};
} public void openActivityDialog(View view)
{
Intent intent = new Intent(this, DialogActivity.class);
startActivity(intent);
} //显示单选对话框
public void openSinglechoiceDialog(View view)
{
showDialog(SINGLE_CHOICE_DIALOG);
} //显示多选对话框
public void openMultichoiceDialog(View view)
{
showDialog(MULTI_CHOICE_DIALOG);
} //显示进度条对话框
public void openProgressDialog(View view)
{
showDialog(PROGRESS_DIALOG);
progress = 0;
progressDialog.setProgress(0);
progressHandler.sendEmptyMessage(0);
} @Override
@Deprecated
protected Dialog onCreateDialog(int id)
{
switch (id)
{
case SINGLE_CHOICE_DIALOG:
return createSingleChoiceDialog(); case MULTI_CHOICE_DIALOG:
return createMultichoiceDialog(); case PROGRESS_DIALOG:
return createProgressDialog(); default:
break;
}
return null;
} /**
* 创建单选对话框
*
*/
public Dialog createSingleChoiceDialog()
{
return new AlertDialog.Builder(this)
.setTitle("单选对话框") //设置对话框标题
.setNegativeButton("取消", null) //设置取消按钮钮
.setPositiveButton("确定", null) //设置确定按
.setSingleChoiceItems(items, 0, //绑定数据
new DialogInterface.OnClickListener()
{ @Override
public void onClick(DialogInterface dialog,
int which)
{
Toast.makeText(getBaseContext(),
items[which].toString(),
Toast.LENGTH_SHORT).show();
}
}).create();
} /**
* 创建多选对话框
*
*/
public Dialog createMultichoiceDialog()
{
return new AlertDialog.Builder(this)
.setTitle("多选对话框") //设置对话框标题
.setNegativeButton("取消", null) //设置取消按钮
.setPositiveButton("确定", null) //设置确定按钮
.setMultiChoiceItems(items, checkedItems, //绑定数据
new DialogInterface.OnMultiChoiceClickListener()
{ @Override
public void onClick(DialogInterface dialog,
int which, boolean isChecked)
{
Toast.makeText(
getBaseContext(),
isChecked ? items[which] + " check"
: items[which] + " uncheck",
Toast.LENGTH_SHORT).show();
}
}).create();
} /**
* 创建带进度条的对话框
*
*/
public Dialog createProgressDialog()
{
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("下载对话框");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMax(MAX_PROGRESS);
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener()
{ @Override
public void onClick(DialogInterface dialog, int which)
{ }
});
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener()
{ @Override
public void onClick(DialogInterface dialog, int which)
{ }
}); return progressDialog;
}
}

 

运行效果:

 

这里比较难理解还是ProgressDialog,因为它需要增加进度。这里我们通过向Activity线程发送消息,

从而能够使用progressDialog.incrementProgressBy(1)方法递增进度条。

使用对话框 —— Dialog的更多相关文章

  1. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 原文地址: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html A ...

  2. 转 Android 对话框(Dialog)大全 建立你自己的对话框

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  3. 95秀-自定义对话框 dialog 合集

    普通的确认对话框 NormalDialog.java import android.app.Dialog; import android.content.Context; import android ...

  4. Android 常用对话框Dialog封装

    Android 6种 常用对话框Dialog封装 包括: 消息对话框.警示(含确认.取消)对话框.单选对话框. 复选对话框.列表对话框.自定义视图(含确认.取消)对话框 分别如下图所示:       ...

  5. Android项目实战(三十二):圆角对话框Dialog

    前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话框的"确定"按钮 难点:1.对话框边框圆角 ...

  6. Android 对话框(Dialog)大全

    转自: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Activities提供了一种方便管理的创建.保存.回复的对话框机制, ...

  7. Android 对话框(Dialog)

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  8. Android 对话框(Dialog) 及 自己定义Dialog

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,比如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  9. (转载)Android项目实战(三十二):圆角对话框Dialog

    Android项目实战(三十二):圆角对话框Dialog   前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话 ...

  10. android对话框(Dialog)的使用方法

    Activities提供了一种方便管理的创建.保存.回复的对话框机制.比如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

随机推荐

  1. 全文检索引擎 Solr 部署与基本原理

    全文检索引擎 Solr 部署与基本原理 搜索引擎Solr环境搭建实例 关于 solr , schema.xml 的配置说明 全文检索引擎Solr系列-–全文检索基本原理 一.搜索引擎Solr环境搭建实 ...

  2. 关于OC中的小数精确计算---NSDecimalNumber

    NSDecimalNumber 翻译补充自:http://rypress.com/tutorials/objective-c/data-types/nsdecimalnumber 感谢乐于分享的大神 ...

  3. iOS json解析的几种方法 NSJSONSerialization,JSONKit,SBJson ,TouchJson

    相关的第三方类库大家可以去github上下载 1.NSJSONSerialization 具体代码如下 : - (void)viewDidLoad { [super viewDidLoad]; NSD ...

  4. JVM-内存管理

    都说搞C的牛叉,那是因为C解决问题,全靠程序员自己,他们对自己的程序在内存中是什么样了如指掌.而Java呢不需要有太多操作系统的知识,不用时刻注意内存的问题,但这不代表我们就不用去了解它背后的原理.J ...

  5. MySQL错误日志总结

    MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息.错误日志的命名通常为hostname.err.其中,hostname表示服务器主机名. ...

  6. Consul Windows 安装

    下载文件https://www.consul.io/downloads.html, 解压完毕后只有一个consul文件 consul 启动一个 Agent consul agent -server - ...

  7. 去掉Actionbar下的shadow

    <item name="android:windowContentOverlay">@null</item> http://www.cnblogs.com/ ...

  8. 【转】App架构设计经验谈:接口的设计

    App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 安全机制的设计 现在,大部分App的接口都采用REST ...

  9. plain framework 1(简约框架)一款主要用于网络(游戏)开发的C/C++框架 即将开源发布

    在我们的日常开发中,我们往往会遇到这种情况,当我们换了一个开发环境时很可能会重新利用一套新的框架进行开发.由于不同框架有着不同的接口,所以我们不得不花时间再次熟悉这些接口,这将造成开发时间上的重复,而 ...

  10. 我觉得有意思的JavaScript题目(01-05更新中)

    对于以下js题目均来至于网络中.有的来至于文章之中,有的也许来至于问答题型中.如果您有更好的问题解释,请留言交流! 1.相关问题描述:到底该怎么去理解闭包? 代码片段A !function(){ va ...