- 浏览: 294352 次
- 性别:
- 来自: 上海
最新评论
-
再_见孙悟空:
写的不错
Dialog -
a549262189:
支持下,正好在学习这块的内容!
Android Gesture Detector -
dcsff:
受教了
LayoutInflater -
庆_啊:
真厉害。
LayoutInflater -
ghj234:
学习了,哈哈
LayoutInflater
Dialog是所有对话框的基类,但Dialog并非继承自View,而是直接从Object构造出来的。Dialog调用是异步调用,所以showDialog()时不会阻碍UI线程。
1. Activity托管对话框:
Android提供了创建对话框的快捷方式,在Activity中可以通过如showDialog(int dialogId),dismissDialog(int dialogId),onCreateDialog(),onPrepareDialog(),removeDialog()等方法来创建和管理对话框。
onCreateDialog(int dialogId)和onPrepareDialog(int dialogId, Dialog dialog)是Dialog的2个回调函数,showDialog()触发这两个回调函数的调用。同所有的onCreate()一样,其只在Dialog第一次生成的时候才会被调用,而onPrepareDialog()在每次执行showDialog()都会被调用(不管Dialog生成了没有)。如果你想要更新对话框的内容,你只要在onPrepareDialog()中作相应的工作就可以了,该方法会在对话框显示之前进行调用。
dismissDialog()方法是用来关闭对话框的;removeDialog()方法用来将对话框从Activity的托管中移除(如果对已经移除的对话框重新进行调用showDialog ,则该对话框将进行重新创建)。
2. 常用Dialog
(1)AlertDialog
AlertDialog类是Dialog类的子类,它默认提供了3个按钮和一个文本消息,这些按钮可以按需要来使他们显示或隐藏。AlertDialog类中有一个内部静态类,名为“Builder”,Builder类提供了为对话框添加多选或单选列表,以及为这些列表添加事件处理的功能。另外,这个Builder类将AlertDialog对话框上的3个按钮按照他们的位置分别称呼为:PositiveButton, NeutralButton, NegativeButton。
(2)ProgressDialog
ProgressDialog.dialog = new ProgressDialog(context); 没有内部静态类,直接构造函数构造
3. 一个很特别的Dialog(由Activity转换而来)
,具体请参见参考doc中android.R.style部分
(1)AndroidManifest.xml中的activity的属性中增加:android :theme="@android :style/Theme.Dialog( Activity的对话框主题)。可使Activity变为Dialog(浮动窗口);
(2)AndroidManifest.xml中的activity的属性中增加:android:theme="@android:style/Theme.Translucent"(Activity半透明主题);
4. 示例代码
(1)自定义Dialog并获取Dialog中EditText的数据
public class MyDialog extends Dialog implements Button.OnClickListener { private Button okButton, cancelButton; private EditText nameEditText; private MyDialogListener listener; public MyDialog(Context context, MyDialogListener listener) { super(context); this.listener = listener; } protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.mydialog); okButton = (Button) findViewById(R.id.okButton); cancelButton = (Button) findViewById(R.id.cancelButton); okButton.setOnClickListener(this); cancelButton.setOnClickListener(this); nameEditText = (EditText) findViewById(R.id.nameEditText); } public void onClick(View v) { switch (v.getId()) { case R.id.okButton: listener.onOkClick(nameEditText.getText().toString()); dismiss(); // 关闭Dialog break; case R.id.cancelButton: cancel(); // 取消Dialog, "取消"的含义是指不再需要执行对话框上的任何功能和动作, 取消对话框会自动调用dismiss()方法 break; } /* * 当用户点击手机设备上的“返回”按钮时,屏幕上的对话框将会被取消, * 如果你想让你的对话框不在这种情况下被取消掉的话,你可以如下设置你的对话框:setCancelable(false); * 对话框的取消和关闭事件可以通过OnCancelListener和OnDismissListener两个监听器来被监听处理。 */ } }
public class MainActivity extends Activity implements MyDialogListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyDialog dialog = new MyDialog(this, this); dialog.show(); } public void onCancelClick() { } public void onOkClick(String name) { Toast.makeText(this, name, Toast.LENGTH_LONG).show(); } } interface MyDialogListener { public void onOkClick(String name); public void onCancelClick(); }
mydialog.xml
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/nameMessage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Enter Name:"></TextView> <EditText android:id="@+id/nameEditText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18sp"></EditText> <LinearLayout android:id="@+id/buttonLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> <Button android:id="@+id/okButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OK"> </Button> <Button android:id="@+id/cancelButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cancel"> </Button> </LinearLayout> </LinearLayout>
(2)
public class MainActivity2 extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AlertDialog dialog = new AlertDialog.Builder(this).create(); dialog.setMessage("Do you play cricket?"); dialog.setButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case AlertDialog.BUTTON1: break; case AlertDialog.BUTTON2: break; } } }); dialog.setButton2("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); dialog.show(); } }
(3)托管Dialog
public class MainActivity extends Activity { private Button button1, button2, button3, button4; private Button.OnClickListener listener1, listener2, listener3, listener4; private final int DIALOG1 = 1, DIALOG2 = 2, DIALOG3 = 3, DIALOG4 = 4; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); prepareListener(); } protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG1: return buildDialog(this, DIALOG1); case DIALOG2: return buildDialog(this, DIALOG2); case DIALOG3: return buildDialog(this, DIALOG3); case DIALOG4: return buildDialog(this, DIALOG4); } return null; } protected void onPrepareDialog(int id, Dialog dialog) { super.onPrepareDialog(id, dialog); } private Dialog buildDialog(Context context, int seq) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setIcon(R.drawable.alert_dialog_icon); if (DIALOG1 == seq) { builder.setTitle(R.string.alert_dialog_two_buttons_title); builder.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setTitle(R.string.alert_dialog_ok); } }); builder.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setTitle(R.string.alert_dialog_cancel); } }); } if (DIALOG2 == seq) { builder.setTitle(R.string.alert_dialog_two_buttons_msg); builder.setMessage(R.string.alert_dialog_two_buttons2_msg); // AlertDialog最多只能有3个Button builder.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setTitle(R.string.alert_dialog_ok); } }); builder.setNeutralButton(R.string.alert_dialog_something, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setTitle(R.string.alert_dialog_something); } }); builder.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setTitle(R.string.alert_dialog_cancel); } }); } if (DIALOG3 == seq) { // LayoutInflater的inflate方法可以将一个XML布局变成一个View实例 LayoutInflater inflater = LayoutInflater.from(this); View textEntryView = inflater.inflate(R.layout.alert_dialog_text_entry, null); builder.setTitle(R.string.alert_dialog_text_entry); // setView()真可以说是Dialog的一个精髓 builder.setView(textEntryView); builder.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setTitle(R.string.alert_dialog_ok); } }); builder.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setTitle(R.string.alert_dialog_cancel); } }); } if (DIALOG4 == seq) { ProgressDialog dialog = new ProgressDialog(context); dialog.setTitle("Downding the songs..."); dialog.setMessage("Please Waiting..."); return dialog; } return builder.create(); } private boolean prepareListener() { // init button button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button3 = (Button) findViewById(R.id.button3); button4 = (Button) findViewById(R.id.button4); // init listener listener1 = new Button.OnClickListener() { public void onClick(View v) { showDialog(DIALOG1); } }; listener2 = new Button.OnClickListener() { public void onClick(View v) { showDialog(DIALOG2); } }; listener3 = new Button.OnClickListener() { public void onClick(View v) { showDialog(DIALOG3); } }; listener4 = new Button.OnClickListener() { public void onClick(View v) { showDialog(DIALOG4); } }; // bind listener button1.setOnClickListener(listener1); button2.setOnClickListener(listener2); button3.setOnClickListener(listener3); button4.setOnClickListener(listener4); return true; } }
alert_dialog_text_entry.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- android:textAppearance:设置字体, 系统自带的字体 --> <!-- android:capitalize:设置大小写;none首字母小写;words首字母大写 --> <TextView android:id="@+id/username_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="用户名" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/username_edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:capitalize="words" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/password_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="密码" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/password_edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:capitalize="none" android:password="true" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>
5.
评论
发表评论
-
如果在Eclipse中debug
2010-05-02 14:15 0最基本的操作是: 1, 首先在一个java文件中设断点,然后 ... -
How to download sourcecode of android with cygwin
2010-04-14 16:07 5077cygwin是一个在windows平台 ... -
TelephoneManager
2010-03-08 16:04 01. protected void onCreate(Bun ... -
eclipse c
2010-03-07 21:05 0Eclipse 除 了可以开发Java之外,还支持了许 ... -
android sdk安装
2010-02-02 23:37 34471.下载:http://developer.android.c ... -
google map my demo
2010-02-02 23:36 3157<uses-library android:name=& ... -
Toast
2010-02-02 23:35 14211. (1) public class ToastActi ... -
如何在MapView上画图
2010-02-02 23:34 1554http://ophone8.com/thread-4340- ... -
Service
2010-02-02 23:33 31091. Service生命周期 (1)Servic ... -
Notification
2010-02-02 23:33 18811. Notification构造器的参数 分别为: ... -
导航相关概念
2010-02-02 23:32 16711. Google Map的定位 (1)Goog ... -
PendingIntent和Intent
2010-02-02 23:28 9488Notification n = new Notificati ... -
Broadcast调用Service做的一个定时器
2010-02-02 23:28 36681. public class AlarmActivity ... -
Broadcast Receiver
2010-02-02 23:27 8654Broadcast Receiver用于接收并处理广播通知(b ... -
LayoutInflater
2010-02-02 23:27 21760一般来讲,我们用LayoutInflater做一件事:infl ... -
Android's Components 生命周期
2010-02-02 23:27 2105Android中,Component(activity、ser ... -
Activity文档翻译
2010-02-02 23:26 1539转自:http://www.blogjava.net/m ... -
Intent
2010-01-20 10:51 011 public class MumActivity ex ... -
aidl
2010-01-05 11:24 30221. android进程之间如何通讯呢(在不同的进程中怎样传递 ... -
Gallery 画廊
2009-12-17 20:25 33271. images.xml <?xml ver ...
相关推荐
各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果...
在Android开发中 我们经常会需要在Android界面上弹出一些对话框 比如询问用户或者让用户选择 关于Android Dialog的使用方法 已经有很多blog做出了详细的介绍(比如博客:7种形式的Android Dialog使用举例) 但是只是...
安卓Service中弹Dialog
public class MainDialog extends Activity implements Runnable{ /**确定取消信息框 **/ private static final int DIALOG_0 = 1; /**多个按钮信息框 **/ private static final int DIALOG_1 = 2; /**列表框...
使用纯javascript实现dialog
dialog在Android开发中是非常常用的,但是系统自带的样式,有限,所以我们需要自定义dialog,定义出我们喜欢的样式。
(1)Popupwindow在显示之前一定要设置宽高,Dialog无此限制。 (2)Popupwindow默认不会响应物理键盘的back,除非显示设置了popup.setFocusable(true);而在点击back的时候,Dialog会消失。 (3)Popupwindow不会...
自定义右上角带叉号的Dialog ,自定义布局的dialog,支持点击事件
自定义的dialog,在图片的dialog 纯属学习@不足之处,请多谅解并指正
* var dialog = new Dialog({ * target: '#dialog', * width: 800, * height: 600, * modal: false, * title: '标题', * draggabled: false * }); * 参数含义 * target: 要用dialog包装的目标,...
dialog为低功耗BLE的代表,此文档是开发DIALOG方案的指导文档
Android Dialog中用Glide加载GIF,Android Dialog中用Glide加载GIF
Android自定义显示内容的Dialog,有两种实现方式,一个继承Dialog,一个继承PopupWindow。
底部弹出dialog 添加简单的进入 退出动画
去掉 android dialog 白色边框
Dialog对话框,包括选择项Dialog,进度条Dialog,下载进度条Dialog
用MVP写的一个自定义dialog,dialog里添加的recyclerView,item为一个滑动条的自定义控件,滑动dialog里的滑动条,会把值传递到activity中.
Dialog是常用的一种Android控件,一般常用的形式有几种。
qml 用item自定义dialog 对话框 很好用的一个自定义对话框