Dialog总结
来源:互联网 发布:c语言变量名命名规则 编辑:程序博客网 时间:2024/05/16 17:11
1 .Dialog常用类型
警告对话框:Alertialog
进度对话框:ProgressDialog
日期选择对话框:DatePickerDialog
时间选择对话框:TimePickerDialog
自定义对话框:从Dialog继承
2.Dialog的创建方式
一是直接new一个Dialog对象,然后调用Dialog对象的show和dismiss方法来控制对话框的显示和隐藏。
二是在Activity的onCreateDialog(int id)方法中创建Dialog对象并返回,然后调用Activty的showDialog(int id)和dismissDialog(int id)来显示和隐藏对话框。
区别在于通过第二种方式创建的对话框会继承Activity的属性,比如获得Activity的menu事件等。
3.onCreateDialog的使用
一个Dialog一直被创建及作为Activity的一部分显示的时候,一般情况下,你应该使用回调方法onCreateDialog(int)创建Dialog,当你使用这个方法的时候,Android系统会自动的管理每一个Dialog的状态,并有效的控制着每个Dialog,同样的,每个Dialog也会继承Activity中的某些特性。就像当一个Dialog显示的时候,按下菜单键显示Activity定义的选项菜单或者使用音量键调整音视频音量的大小,当你想显示一个Dialog的时候,调用showDialog(int)方法,传递的参数是唯一能标识你想显示的对话框的整数。
当一个Dialog第一次被调用的时候,Android系统会调用你应该实例化Dialog的Activity的onCreateDialog方法(这里需要注意只有在第一次创建的时候才会调用),这个方法会启动你从showDialog(int)方法里面传递的那个ID参数所定义的Dialog,当你创建成功后,在方法的最后回返回这个Dialog。
在Dialog显示之前,Android也会调用回调函数onPrepareDialog(int,Dialog),当你想在这个Dialog每次打开的时候一些属性得到改变,你可以定义这个方法,这个方法会在每次Dialog打开的时候被调用,onCreateDialog()只会在Dialog第一次打开的时候被调用,(此时调用顺序onCreateDialog->onPrepareDialog)如果你没有定义onPrepareDialog(),每次返回的Dialog都是和第一次显示的Dialog一样,这个方法通过参数会传递一个ID和在onCreateDialog()方法中创建的Dialog。(将要显示的Dialog和它的ID)
当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。如果需要,你还可以从这个Activity中调用dismissDialog(int id) 方法,这实际上将为你对这个对话框调用dismiss() 方法。 如果你想使用onCreateDialog(int id) 方法来管理你对话框的状态,然后每次你的对话框消除的时候,这个对话框对象的状态将由该Activity保留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(int id)。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。
最好的定义onCreateDialog()和onPrepareDialog()中使用switch对传入的id进行下判断,每一个case对应着要启动的Dialog的ID,像下面这个例子一样:
- @Override
- protected Dialog onCreateDialog(int id) {
- // TODO Auto-generated method stub
- switch (id) {
- case DIALOG_SOURCE_MESSAGE:
- // 设置数据源
- if (mDlgSource == null) {
- mDlgSource = new AlertDialog.Builder(SettingsTabActivity.this)
- .setTitle(R.string.select_data_source)
- .setSingleChoiceItems(R.array.source_item, 0,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- // TODO Auto-generated method stub
- mDlgSource.dismiss();
- }
- }).create();
- }
- return mDlgSource; }
- return null;
- }
调用方式:showDialog(DIALOG_SOURCE_MESSAGE);
- public void onSourceSettings(View v) {
- Log.i(TAG, "onSourceSettings");
- <span style="color:#ff0000;">showDialog(DIALOG_SOURCE_MESSAGE);
- /span>
- }
4.ProgressDialog 和ProgressBar
一 、ProgressDialog
ProgressDialog与ProgressBar在UI中动态显示一个加载图标显示程序运行状态。
ProgressDialog是继承自Android.app.ProgressDialog所设计的互动对话窗口,使用时,必须新建ProgressDialog对象,在运行时会弹出“对话框”作为提醒,此时应用程序后台失去焦点(即此时无法对UI组件进行操作),直到进程结束后,才会将控制权交给应用程序,如果在Activity当中不希望后台失焦,又希望提示User有某后台程序正处于忙碌阶段,那么ProgressBar就会派上用场了。
- ProgressDialog mProgressDialog = new ProgressDialog(TestProgerssDialogActivity.this);
- // 设置mProgressDialog风格
- mProgressDialog.setProgress(ProgressDialog.STYLE_SPINNER);//圆形
- mProgressDialog.setProgress(ProgressDialog.STYLE_HORIZONTAL);//水平
- // 设置mProgressDialog标题
- mProgressDialog.setTitle("提示");
- // 设置mProgressDialog提示
- mProgressDialog.setMessage("这是一个圆形进度条对话框");
- // 设置mProgressDialog进度条的图标
- mProgressDialog.setIcon(R.drawable.flag);
- // 设置mProgressDialog的进度条是否不明确
- //不滚动时,当前值在最小和最大值之间移动,一般在进行一些无法确定操作时间的任务时作为提示,明确时就是根据你的进度可以设置现在的进度值
- mProgressDialog.setIndeterminate(false);
- //mProgressDialog.setProgress(m_count++);
- // 是否可以按回退键取消
- mProgressDialog.setCancelable(true);
- // 设置mProgressDialog的一个Button
- mProgressDialog.setButton("确定", new DialogInterface.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which)
- {
- dialog.cancel();
- }
- });
- // 显示mProgressDialogmProgressDialog.show();
- mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
- @Override
- public void onCancel(DialogInterface dialog) {
- // TODO Auto-generated method stub
- mProgressDialog.hide();
- webview.stopLoading();
- }
- });
当有ProgressDialog时,点击back时,会首先取消ProgressDialog ,以上代码可以监听进度条被取消事件(也就是点击Back键取消ProgressDialog),此时可以在这里作一些取消后台操作的处理。
二、ProgressBar
XML重要属性
android:progressBarStyle:默认进度条样式
android:progressBarStyleHorizontal:水平样式
重要方法
getMax():返回这个进度条的范围的上限
getProgress():返回进度
getSecondaryProgress():返回次要进度
incrementProgressBy(int diff):指定增加的进度
isIndeterminate():指示进度条是否在不确定模式下
setIndeterminate(boolean indeterminate):设置不确定模式下
setVisibility(int v):设置该进度条是否可视
重要事件
onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件
- <?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">
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Welcome to blog" />
- <ProgressBar
- android:id="@+id/rectangleProgressBar"
- style="?android:attr/progressBarStyleHorizontal" mce_style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:visibility="gone"
- />
- <ProgressBar
- android:id="@+id/circleProgressBar"
- style="?android:attr/progressBarStyleLarge" mce_style="?android:attr/progressBarStyleLarge"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:visibility="gone"
- />
- <Button android:id="@+id/button"
- android:text="Show ProgressBar"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
5.DatePickerDialog
Calendar aCalendar = Calendar.getInstance();int year = aCalendar.get(Calendar.YEAR);int monthOfYear = aCalendar.get(Calendar.MONTH);int dayOfMonth = aCalendar.get(Calendar.DAY_OF_MONTH);// 时间选择对话框DatePickerDialog dialog = new DatePickerDialog(this,new OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) {Log.e("DatePickerDialog onDateSet", year + "年"+ (monthOfYear + 1) + "月" + dayOfMonth + "日");}}, year, monthOfYear, dayOfMonth);dialog.show();
6.TimePickerDialog
TimePickerDialog timePickerDialog = new TimePickerDialog(this,new OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay,int minute) {//设置时间后调用Log.e("TimePickerDialog onTimeSet", hourOfDay + "时"+ minute + "分");}}, aCalendar.get(Calendar.HOUR_OF_DAY), Calendar.MINUTE, false);timePickerDialog.show();
7.Alertialog
AlertDialog.Builder builder = new Builder(this);builder.setTitle("喜好调查");builder.setMessage("你喜欢李连杰的电影吗");// 设置显示的消息builder.setView(new EditText(this));// 设置dialog内容builder.setIcon(R.drawable.ic_launcher);builder.setCancelable(false);// 设置是否可以点击back键取消,默认为可以的builder.setItems(new String[] {}, new OnClickListener() {// 一组简单的列表项@Overridepublic void onClick(DialogInterface dialog, int which) {}});// 设置内容为单选框builder.setSingleChoiceItems(new String[] {}, 0, new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.setNegativeButton("不喜欢", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.setPositiveButton("喜欢", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.setNeutralButton("一般", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.show();
8.自定义Dialog
自定义Dialog就是extends Dialog 然后通过setContentView设置其布局
public static MyDialog show(Context context, CharSequence message, boolean cancelable,OnCancelListener cancelListener) {MyDialog dialog = new MyDialog(context,R.style.MyDialog);dialog.setTitle("");dialog.setContentView(R.layout.mydialog);if(message == null || message.length() == 0) {dialog.findViewById(R.id.message).setVisibility(View.GONE);} else {TextView txt = (TextView)dialog.findViewById(R.id.message);txt.setText(message);}dialog.setCancelable(cancelable);dialog.setOnCancelListener(cancelListener);dialog.getWindow().getAttributes().gravity=Gravity.CENTER;dialog.show();return dialog;}
- Dialog总结
- Dialog总结
- Dialog总结
- 对话框Dialog总结
- Android Dialog用法总结
- 对话框Dialog总结
- Android常用Dialog总结
- jquery 的dialog 总结
- Dialog总结(一)
- Android Dialog用法总结
- Android Dialog用法总结
- Dialog 对话框总结
- Android Dialog用法总结
- android dialog使用总结
- Android Dialog总结
- 对话框Dialog使用总结
- Dialog使用总结
- dialog的自我总结
- 开发ssh框架程序推荐的目录结构(转)
- SegY地震体数据可视化分析工具 开发笔记 2
- 图 邻接矩阵 邻接表
- 多线程编程(12) - 多线程同步之 Semaphore (信号对象)(转自万一博客)
- iOS应用审核的通关秘籍
- Dialog总结
- 等待消失的任务
- 每日一题(37) - 两个队列实现栈
- 黑马程序员--01.赋值语句练习【个人总结】
- Android 中创建avd和sdcard
- 多拉送了一些鸡蛋给圭多,意味深长地目送他远去。
- 2354:整理试卷
- MasonJS – 创建完美的砌体结构网页布局
- Android AVD创建及设置中各参数详解