- 浏览: 637811 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
luo_ganlin:
别的不多说,点个赞!
关于Android隐式启动Activity -
IWSo:
谢楼主!研究了好久,原来是这样!
android中如何让LinearLayout实现点击时背景图片切换 -
fantao005x:
粘帖的不错
android中如何让listview的内容全部显示出来 -
learner576539763:
Android_gqs 写道请问博主,Viewstub 可实现 ...
android中ViewStub使用 -
goontosoon:
抄的什么啊,狗屁不通
对ContentProvider中getType(Uri uri)
Andoid Dialog
1、AlertDialog,具有0-3个按钮,可以放选项、复选框单选框等,以建议的方式域用户交互可以。
2、ProgressDialog,显示一个进度的圆环或者进度条。
3、DataPickerDialog,选择日期的dialog。
4、TimePickerDialog,选择时间的dialog。
用户可以继承Dialog类或者它的子类并且创建一个新的leyout。
Showing a Dialog
Dialog总是作为一个Activity的一部分来创建和显示的。正常可以使用Activity的onCreateDialog(int)回调函数来创
建Dialog。使用这个回调函数的时候,系统会自动管理每个dialog的状态,并把它们关联到这个Activity,有效的使它成为dialog的所
有者。这样每个第啊咯个都从父Activity继承一些属性。For example, when a dialog is open, the
Menu key reveals the options menu defined for the Activity and the
volume keys modify the audio stream used by the Activity.
注意:如果你在onCreate()之外创建dialog,他不会附属于任何的Activity,可以使用dialog的setOwnerActivity(Activity)来设置。
当想显示一个dialog的时候,调用showDialog(int),并传递一个整数来唯一标识想要显示的dialog即可。
当第一次使用一个dialog的时候,Android会调用onCreateDialog(int),应该在这里创建dialog。这个回调方法的参数是你传递给showDialog(int)的id。创建Dialog结束后,返回这个dialog对象。
在现实一个dialog之前,Android会先用可选的回调非法onPrepareDialog(int)。如果想在每次打开dialog的时候改变它
的属性就可以通过重写这个方法来实现。他会在每次打开dialog的时候被调用,而onCreateDialog(int)只在第一次打开一个
dialog的时候调用。如果不定义onPrepareDialog(),那么dialog将保持塌方上次被打开的属性。This method is
also passed the dialog's ID, along with the Dialog object you created in
onCreateDialog()。
创建Dialog的Example:
static final int DIALOG_PAUSED_ID = 0;
static final int DIALOG_GAMEOVER_ID = 1;
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch(id) {
case DIALOG_PAUSED_ID:
// do the work to define the pause Dialog
break;
case DIALOG_GAMEOVER_ID:
// do the work to define the game over Dialog
break;
default:
dialog = null;
}
return dialog;
}
显示创建的dialog:showDialog(DIALOG_PAUSED_ID);
Dismissing a Dialog
当准备关闭dialog的时候,可以调用dialogobject的dismiss()方法。如果必要,可以调用Activity的dismissDialog(int),它会有效的调用dialog的dismiss()。
如果你使用onCreateDialog(int)来管理dialog的状态,那么每次关闭dialog的时候,dialog的状态都会被
Activity保存。如果这个dialog不会再次被使用或者清除它的状态很重要,可以调用removeDialog(int),这回清除内部任何对它
的引用,如果它正在显示,会被关闭。
Using dismiss listeners
如果想在dialog被关闭的时候执行一些操作,应该为dialog设置on-dismiss listener。
首先定义DialogInterfacev.OnDismissListener接口。这个接口只有一个方
法,vonDismiss(DialogInterface),当关闭dialog的时候会调用这个方法。把OnDismissListener的实现传
递给setOnDismissListener()就可以了。
注意,dialog可以被取消。这是由用户显示取消dialog的特殊情况,在用户点击back键或者显示调用cancel()函数就是这种情况。当
dialog被cancel的时候,OnDismissListener不会被通知,如果你想知道dialog被显示的cancel(不是正常的关闭),
那么你应该用setOnCancel()注册一个vDialogInterface.OnCancelListener。
Creating an AlertDialog
AlertDialog是Dialog的子类,它可以构造用户交互的多数dialog,是建议的dialog类型。下列情况可以使用AldertDialog:
A tittle;
A text message;
One,two,or three buttons;
A list of selectable items (with optional checkboxes or radio buttons)
可以使用AlertDialog.Builder的子类来创建AlertDialog。通过AlertDialogBuilder(Context)来创
建一个builder并使用这个builder的public方法来定义AlertDialog的所有属性。在使用builder创建结束后,使用
create()来得到创建的AlertDialog对象。
The following topics show how to define various properties of the
AlertDialog using the AlertDialog.Builder class. If you use any of the
following sample code inside your onCreateDialog() callback method, you
can return the resulting Dialog object to display the dialog.
Adding buttons
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
注意:每种类型的按钮只能添加一个。这限制了按钮的个数(3个)。这些名字于其功能无关只用来帮助你记住这些按钮是干嘛的。
Adding a list
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
Adding checkboxes and radio buttons
可以用vsetMultiChoiceitems()和setSingleChoiceItems()来在AlertDialog上设置多选或者单选列
表。如果使用onCreateDialog()创建这些选项列表,那么Android会维护这个选项列表的状态。在Activity存活期间,这个
dialog会记住先前的选项状态,但是当用户利卡这个Activity时,选项状态就会丢失。
注意:为了在用户退出或者暂停这个Activity时保存选项状态,你必须在整个Activity的生命周期中恰当的保存和恢复选项状态。为了永久的保存选项状态(甚至在Activity进程完全结束之后),你应该使用数据存储技术来保存选项状态。
To create an AlertDialog with a list of single-choice items like the one
shown to the right, use the same code from the previous example, but
replace the setItems() method with setSingleChoiceItems():
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
在setSingleChoiceItems()的第二个参数是一个整形表示哪个item被选中,item的标识从0开始,-1表示没有item默认被选中。
Creating a ProgressDialog
ProgressDialog是AlertDialog的子类,可以显示进度动画:用旋转的环表示进度未定义的task;用进度条表示定义了进度的task。这个dialog也可以提供按钮,比如下载过程中的取消按钮。
打开一个进度dialog简单到只要调用ProgressDialog.show()就可以了。
比如:
ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "",
"Loading. Please wait...", true);
第一个参数是程序的context, 第二个参数是tittle,第三个是message, 第三个参数表示这个progress时候是不清楚的(它只在创建进度条的时候有意义, which is discussed in the next section).
Showing a progress bar
显示一个用动画表示进度的进度条:
1、用构造方法ProgressDialog(Context)初始一个ProgressDialog。
2、用setProgressStyle(int)设置style为STYLE_HORIZONTAL,并设置其他的属性,比如message等。
3、准备显示dialog的时候调用show()或者使用onCreateDialog(int)来返回这个ProgressDialog。
4、可以调用setProgress(int)传递目前完成的全部百分比或者vincrementProgressBy(int)传递增量值来增加进度条显示的进度。
比如:
ProgressDialog progressDialog;
progressDialog = new ProgressDialog(mContext);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);
设置ProgressDialog很简单,创建ProgressDialog的多数代码多数是用来更新它的。你会发现需要使用Handler来创建新的线程来进行这项工作并把进度反映到Activity的UI上。
Example ProgressDialog with a second thread
This example uses a second thread to track the progress of a process
(which actually just counts up to 100). The thread sends a Message back
to the main Activity through a Handler each time progress is made. The
main Activity then updates the ProgressDialog.
package com.example.progressdialog;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class NotificationTest extends Activity {
static final int PROGRESS_DIALOG = 0;
Button button;
ProgressThread progressThread;
ProgressDialog progressDialog;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Setup the button that starts the progress dialog
button = (Button) findViewById(R.id.progressDialog);
button.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
showDialog(PROGRESS_DIALOG);
}
});
}
protected Dialog onCreateDialog(int id) {
switch(id) {
case PROGRESS_DIALOG:
progressDialog = new ProgressDialog(NotificationTest.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Loading...");
progressThread = new ProgressThread(handler);
progressThread.start();
return progressDialog;
default:
return null;
}
}
// Define the Handler that receives messages from the thread and update the progress
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
int total = msg.getData().getInt("total");
progressDialog.setProgress(total);
if (total >= 100){
dismissDialog(PROGRESS_DIALOG);
progressThread.setState(ProgressThread.STATE_DONE);
}
}
};
/** Nested class that performs progress calculations (counting) */
private class ProgressThread extends Thread {
Handler mHandler;
final static int STATE_DONE = 0;
final static int STATE_RUNNING = 1;
int mState;
int total;
ProgressThread(Handler h) {
mHandler = h;
}
public void run() {
mState = STATE_RUNNING;
total = 0;
while (mState == STATE_RUNNING) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Log.e("ERROR", "Thread Interrupted");
}
Message msg = mHandler.obtainMessage();
Bundle b = new Bundle();
b.putInt("total", total);
msg.setData(b);
mHandler.sendMessage(msg);
total++;
}
}
/* sets the current state for the thread,
* used to stop the thread */
public void setState(int state) {
mState = state;
}
}
}
Creating a Custom Dialog
如果需要一个自定义设计的dialog,你可以创建自己的layout。定义好layout后,传递root View对象或者leyout资源ID给setContentView(View)。
例如:
1、创建XML layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
>
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="10dp"
/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#FFF"
/>
</LinearLayout>
2、设置这个layout为这个dialog的内容 并定义ImageView和TextView的内容。
Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.android);
在初始化dialog后,使用setContentView(int)设置自定义的layout为dialog的content
view。这时这个dialog已经定义好了layout,你可以使用dialog的findViewByID(int)来从layout中得到View
对象,并修改其中的内容。
3、好了,现在你可以显示这个dialog了。
通过基类Dialog创建的dialog的必须有tittle,如果不调用setTittle(),那么tittle的空间会空着而且可见。如果你根本不
需要tittle,那么应该使用AlertDialog来创建自定义的dialog。因为使用AlertDialog.Builder来创建
AlertDialog更容易,你也不需要访问vsetContentView(int)而是用setView(View)。它接受一个View对象参
数,所以你需要inflate the layout's root View object from XML。
To inflate the XML
layout,使用getLayoutInflater()或者getSystemService()得到LayoutInflater,然后调用
inflate(int, ViewGroup)(第一个参数是layout的资源ID,第二个是root
view的标识符)。至此,你可以用这个inflated
layout来得到layout中的View对象并且定义其中的内容了。然后初始AlertDialog.Builder并setView为这个
inflated layout。
例如:
AlertDialog.Builder builder;
AlertDialog alertDialog;
Context mContext = getApplicationContext();
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER);
View layout = inflater.inflate(R.layout.custom_dialog,
(ViewGroup) findViewById(R.id.layout_root));
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);
builder = new AlertDialog.Builder(mContext);
builder.setView(layout);
alertDialog = builder.create();
Using an AlertDialog for your custom layout lets you take advantage of
built-in AlertDialog features like managed buttons, selectable lists, a
title, an icon and so on.
发表评论
-
EditText软键盘弹出问题解决
2013-02-26 23:10 1470当带有EditView的activity第一次进入时,第一 ... -
android中获取系统相关属性adb
2012-11-15 14:41 22011.查看系统相关属性可以通过: adb shell ... -
Android使用Intent传递复杂参数及复杂参数列表
2012-11-05 17:29 1638刚开始一直纠结于Intent只能put像int, ... -
解决P6200/P6800扩展卡第三方软件不可写的BUG
2012-11-05 17:01 1036从XDA看来的步骤:1. Using a root-e ... -
android 中跟actionbar相关的属性
2012-10-25 17:07 2485android:uiOptions 这个属性用于设置A ... -
source insight使用快捷键
2012-10-25 10:59 1560F5指定行号,实现行跳转,在遇到编译错误的时候,能特 ... -
android中推出应用比较有效率的方法
2012-10-11 16:57 1167添加一个全局变量作为程序退出的标记(boolean类型) ... -
declare-styleable的使用
2012-10-09 13:59 1180declare-styleable的使用 decl ... -
android程序安全的建议
2012-09-29 14:58 5316如果保证自己的 ... -
Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用
2012-09-29 14:45 1080从 Java 5 开始,Java 提供了自己的线程池。线 ... -
android应用检测更新代码
2012-09-24 17:40 1855JAVA代码: UpdateManager.java ... -
adb命令详解
2012-09-19 15:04 2894Android adb的常用命令略解 Androi ... -
android中屏蔽其它系统按钮的dialog
2012-09-18 10:13 1655public class MyProgress ... -
如何给Scrollview里内容截屏并生成bitmap,注意:Scrollview里面内容较多有滚动了
2012-09-18 10:07 1649使用for循环递归累加其内部的子控件的高度: p ... -
wakelock的使用
2012-09-17 11:44 10088PowerManager.WakerLock是我分析St ... -
启动另外一个apk
2012-09-14 13:16 907这篇博文主要是获取其他apk程序的启动的主intent, ... -
android中全屏的方法
2012-09-14 13:04 9711.直接代码编写 @Override ... -
android:installLocation简析
2012-09-12 15:25 1124在Froyo(android 2.2,API Le ... -
外部apk启动启动另外一个apk
2012-09-06 17:54 1057public class TestingBroadc ... -
listview如何实现圆角
2012-09-05 17:32 1944首先呢,我们还是看几个示图:(这是360推出的一款天气预 ...
相关推荐
在Android开发中,Dialog是一种非常重要的UI组件,用于在用户界面中显示临时信息或与用户进行交互。"Android中Dialog从底部划入"这个话题主要关注如何实现一个自定义的Dialog,使其从屏幕底部动画滑出,提升用户体验...
在Android应用开发中,Dialog是一种重要的用户交互组件,它用于显示临时信息或向用户征求简短的确认或选择。在日常开发中,我们经常会遇到各种类型的对话框需求,如警告、确认、信息提示等。本资源集合了Android中...
在调用dialog的时候得到dialog对象,加入资料中代码,可以控制dialog的按钮在什么时候消失,而不是系统默认的点击消失
在Dialog中通过AnimationDrawable或ObjectAnimator来启动这个动画。 在代码中实例化并展示自定义DialogFragment时,可以通过`newInstance()`方法传递参数,如主题类型(透明或正常),然后在DialogFragment内部根据...
在Android开发中,Dialog是一种常见的用户交互元素,用于展示临时信息或者进行简单的用户操作确认。本文将详细解析如何在Android中使用Dialog,并提供一些实用的实践技巧。 首先,最基本的Dialog类型是AlertDialog...
在Android开发中,Dialog是一种非常重要的组件,它用于在用户界面之上显示临时的窗口,通常用来提示用户一些信息或者请求用户的确认操作。本篇将详细讲解如何在Android中使用AlertDialog,以及相关的知识点。 首先...
首先,我们需要创建一个XML布局文件,该文件将定义Dialog中的控件及其样式。示例代码如下: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" ...
- 不要在Dialog中执行耗时的操作,以免阻塞主线程。 - 对于重要的对话,考虑使用`AlertDialog`而不是普通的`Dialog`,因为`AlertDialog`提供了更好的默认样式和行为。 综上所述,`Android自定义dialogDemo`涵盖了...
在Android开发中,自定义Dialog和Activity的跳转样式是提升用户体验和应用独特性的重要手段。自定义Dialog可以使应用程序在提示用户信息或者进行选择时,展现出更符合应用风格的界面,而自定义Activity跳转样式则能...
在Android开发中,Dialog是一种非常常见的UI组件,用于向用户展示一些临时性的信息或需要用户进行选择的操作。本文将详细讲解如何在Android中使用Dialog,包括各种类型对话框的创建和自定义。 首先,我们来看如何...
本文实例展示了Android中Dialog去黑边的方法。并且分为保留阴影与不保留阴影两种实现方法。供大家参考借鉴。具体实现方法如下: 1.不保留阴影 代码如下: <?xml version=1.0 encoding=utf-8?> <style ...
在Android开发中,有时我们需要在Dialog中展示动态内容,如GIF动图,来提供更丰富的用户交互体验。本文将详细讲解如何在Android Dialog中利用Glide库加载并播放GIF。 首先,Glide是一个非常流行的Android图片加载库...
在Android开发中,Dialog是一种非常重要的用户界面组件,它用于在主界面之上显示临时信息或者进行用户交互。本文将深入探讨如何在Android中创建和使用各种类型的Dialog,并提供详细的代码示例。 首先,我们从最基本...
各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果...
在Android开发中,`Dialog`是一个非常重要的组件,它用于在主界面之上显示一个半透明的弹出窗口,用于向用户展示信息、进行交互或请求确认。本篇将深入探讨`Dialog`在Android中的应用、自定义以及相关知识点。 ### ...
在Android应用开发中,对话框(Dialog)是一种常见的用户交互元素,用于向用户展示临时信息、请求确认或者提供选项。标题提到的“Android-dialog库”是Android开发中的一个第三方库,它提供了一种灵活的方式,使得...
在Android开发中,自定义Dialog是一种常见的需求,用于提供一种轻量级的用户交互界面,如提示信息或者进行选择操作。本示例是关于如何创建一个具有多选功能的Dialog,结合了Dialog、ListView和CheckBox的使用。下面...
// 获取相机拍摄的照片,可以在这里显示在全屏Dialog中 } } ``` 对于图片选择,可以使用类似的方式启动图库Intent: ```java Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media....
在Android开发中,Dialog是一种常见的用户交互元素,用于在用户界面中显示临时信息或进行简单的交互操作。通常,当我们使用AlertDialog构建一个对话框时,它的默认行为是在用户点击按钮(如"确定"或"取消")后自动...
在Android开发中,底部弹出Dialog是一种常见的交互方式,它用于显示临时信息或者提供用户一些简短的操作选项。本文将详细讲解如何实现一个带有动画效果的底部弹出Dialog,并通过具体的代码实例进行演示。 首先,...