建设信用卡积分兑换商城网站,京东关键词优化技巧,哪个网站下载软件最安全,苏州网站开发公司兴田德润在哪儿Dialog是所有对话框的基类#xff0c;但Dialog并非继承自View#xff0c;而是直接从Object构造出来的。Dialog调用是异步调用#xff0c;所以showDialog()时不会阻碍UI线程。 1. Activity托管对话框: Android提供了创建对话框的快捷方式#xff0c;在Activity中可以通过如s…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 1AlertDialog AlertDialog类是Dialog类的子类它默认提供了3个按钮和一个文本消息这些按钮可以按需要来使他们显示或隐藏。AlertDialog类中有一个内部静态类名为“Builder”Builder类提供了为对话框添加多选或单选列表以及为这些列表添加事件处理的功能。另外这个Builder类将AlertDialog对话框上的3个按钮按照他们的位置分别称呼为PositiveButton, NeutralButton, NegativeButton。 2ProgressDialog ProgressDialog.dialog new ProgressDialog(context); 没有内部静态类直接构造函数构造 3. 一个很特别的Dialog由Activity转换而来 具体请参见参考doc中android.R.style部分 1AndroidManifest.xml中的activity的属性中增加android :themeandroid :style/Theme.Dialog Activity的对话框主题。可使Activity变为Dialog浮动窗口 2AndroidManifest.xml中的activity的属性中增加android:themeandroid:style/Theme.TranslucentActivity半透明主题 4. 示例代码 1自定义Dialog并获取Dialog中EditText的数据 Java代码 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两个监听器来被监听处理。 */ } } Java代码 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代码 ?xml version1.0 encodingUTF-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthfill_parent android:layout_heightwrap_content android:orientationvertical TextView android:idid/nameMessage android:layout_widthfill_parent android:layout_heightwrap_content android:textEnter Name:/TextView EditText android:idid/nameEditText android:layout_widthfill_parent android:layout_heightwrap_content android:textSize18sp/EditText LinearLayout android:idid/buttonLayout android:layout_widthfill_parent android:layout_heightwrap_content android:layout_gravitycenter_horizontal Button android:idid/okButton android:layout_widthwrap_content android:layout_heightwrap_content android:textOK /Button Button android:idid/cancelButton android:layout_widthwrap_content android:layout_heightwrap_content android:textCancel /Button /LinearLayout /LinearLayout Java代码 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(); } } 托管Dialog Java代码 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代码 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:orientationvertical android:layout_widthfill_parent android:layout_heightfill_parent !-- android:textAppearance设置字体, 系统自带的字体 -- !-- android:capitalize设置大小写none首字母小写words首字母大写 -- TextView android:idid/username_view android:layout_widthwrap_content android:layout_heightwrap_content android:layout_marginLeft20dip android:layout_marginRight20dip android:text用户名 android:textAppearance?android:attr/textAppearanceMedium / EditText android:idid/username_edit android:layout_widthfill_parent android:layout_heightwrap_content android:layout_marginLeft20dip android:layout_marginRight20dip android:capitalizewords android:textAppearance?android:attr/textAppearanceMedium / TextView android:idid/password_view android:layout_widthwrap_content android:layout_heightwrap_content android:layout_marginLeft20dip android:layout_marginRight20dip android:text密码 android:textAppearance?android:attr/textAppearanceMedium / EditText android:idid/password_edit android:layout_widthfill_parent android:layout_heightwrap_content android:layout_marginLeft20dip android:layout_marginRight20dip android:capitalizenone android:passwordtrue android:textAppearance?android:attr/textAppearanceMedium / /LinearLayout 去除对话框Dialog白色边框 使用样式文件在values 目录下新建styles.xml文件编写如下代码 Xml代码 resources style namedialog parentandroid:style/Theme.Dialog item nameandroid:windowFramenull/item item nameandroid:windowIsFloatingtrue/item item nameandroid:windowIsTranslucentfalse/item item nameandroid:windowNoTitletrue/item item nameandroid:backgroundandroid:color/black/item item nameandroid:windowBackgroundnull/item item nameandroid:backgroundDimEnabledfalse/item /style /resources 调用时使用AlerDialog的接口类Dialog 接口编写如下代码 Java代码 Dialog dialog new Dialog(SetActivity.this, R.style.dialog); dialog.setContentView(R.layout.test); dialog.show(); 下面我们查看一下Dialog的源码文件里面的构造函数为如下 Java代码 public Dialog(Context context, int theme) { mContext new ContextThemeWrapper( context, theme 0 ? com.android.internal.R.style.Theme_Dialog : theme); mWindowManager (WindowManager)context.getSystemService(window); Window w PolicyManager.makeNewWindow(mContext); mWindow w; w.setCallback(this); w.setWindowManager(mWindowManager, null, null); w.setGravity(Gravity.CENTER); mUiThread Thread.currentThread(); mDismissCancelHandler new DismissCancelHandler(this); } 这里面我们可以看出Android 使用了默认的构造函数为Dialog 设置样式如果没有为其设置样式即默认加载事先编写好的样式文件Dialog 一共由多个9.png的图片构成大部分都是带有边框的9.png图片所以就是为什么我们上边的样式文件要将其背景去除掉。 前后效果对比 未设置前 设置后 模式对话框Dialog背景的透明度黑暗度设置方法 设置透明度 Java代码 WindowManager.LayoutParams lpdialog.getWindow().getAttributes(); lp.alpha1.0f; dialog.getWindow().setAttributes(lp); alpha在0.0f到1.0f之间。1.0完全不透明0.0f完全透明 设置黑暗度 Java代码 dialog.setContentView(R.layout.dialog); WindowManager.LayoutParams lpdialog.getWindow().getAttributes(); lp.dimAmount1.0f; dialog.getWindow().setAttributes(lp); dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); Android 之 ProgressDialog http://blog.csdn.net/dadahacker/archive/2011/02/25/6208368.aspx Android 对话框(Dialog)大全 建立你自己的对话框 http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html