1.对话框的使用

1.1AlertDialog的显示

简单对话框以及监听的设置:重点掌握三个按钮(也就是三上单词):

PositiveButton(确认按钮);NeutralButton(忽略按钮)

AlertDialog.Builder bud1=new Builder(mContext);

bud1.setTitle("提示信息");

bud1.setMessage("您的信息已提交完成!");

bud1.setPositiveButton("确认", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss(); //对话框消失

}

});

bud1.setPositiveButton(" 取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.cancel();//取消对话框 Toast.makeText(mContext, "你已取消会话!", Toast.LENGTH_LONG).show();

}

});

bud1.setNeutralButton("忽略", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Toast.makeText(Code06_03.this, "你已忽略。。。", Toast.LENGTH_LONG).show();

}

});

//单选按钮,选取其中一个

//1.设置数据源

final String[] items = {"android", "ipone", "Symbian"};

//2.数据适配

bud1.setItems(items, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

Toast.makeText(mContext,items[which],Toast.LENGTH_SHORT).show();

}

});

//自定义对话框

ImageView img = new ImageView(this);

img.setImageResource(R.drawable.icon);

Bud1

.setView(img)

bud1.create().show();//显示对话框

1.2.ProgressDialog的显示

关键为什么在子线程中调用UI操作未报错问题,经过分析,

ProgressDialg内部已经实现了Hanlder,因而未报错。而runOnUiThread的使用也显的多余了。

protected void dialog9() {

new Thread(new Runnable() {

@Override

public void run() {

try {

Thread.sleep(5 * 1000);

// progressDialog.dismiss();

runOnUiThread(finishDialog);

} catch (InterruptedException e) {

}

}

}).start();

progressDialog = ProgressDialog.show(Code06_07.this, "请稍等",

"数据正在加载中...", true);

}

private Runnable finishDialog = new Runnable() {

@Override

public void run() {

progressDialog.dismiss();

}

};

m_pDialog = new ProgressDialog(Code06_09.this);

// 设置进度条风格,风格为长形

m_pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

// 设置ProgressDialog 标题

m_pDialog.setTitle("提示");

// 设置ProgressDialog 提示信息

m_pDialog.setMessage("这是一个长形对话框进度条");

// 设置ProgressDialog 标题图标

m_pDialog.setIcon(R.drawable.icon);

// 设置ProgressDialog 进度条进度

m_pDialog.setProgress(100);

// 设置ProgressDialog 的进度条是否不明确

m_pDialog.setIndeterminate(false);

// 设置ProgressDialog 是否可以按退回按键取消

m_pDialog.setCancelable(true);

// 让ProgressDialog显示

m_pDialog.show();

new Thread() {

public void run() {

try {

while (m_count <= 100) {

// 由线程来控制进度。

m_pDialog.setProgress(m_count++);

Thread.sleep(1000);

}

m_pDialog.cancel();

} catch (InterruptedException e) {

m_pDialog.cancel();

}

}

}.start();

}

我在测试代码时,遇到一个过时的方法,有一个新的API以供使用

/***
 * 第一个参数是用来确定哪个按钮绑定监听
 *  @param whichButton Which button to set the listener on, can be one of
 *  有以下常量来提供选择
 *  BUTTON_POSITIVE
 *  {@link DialogInterface#BUTTON_POSITIVE}
 *  {@link DialogInterface#BUTTON_NEGATIVE}
 *  {@link DialogInterface#BUTTON_NEUTRAL
 **/
progress.setButton(AlertDialog.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int i) {
        // 点击“确定按钮”取消对话框
        dialog.cancel();
    }
});

经以上分析,与代码的编写,可以总结出:ProgressDialog的延时,使用了Handler机制,可以放心的在Thread中延时,在Thread中的操作有 setProgress,dismiss等方法。

1.3 自定义对话框-

LayoutInflater inflater=mContext.getLayoutInflater();

mView=inflater.inflate(R.layout.dialog,// 自定义对话框视图

null);

AlertDialog.Builder(mContext).setView(mView);

飞哥今天讲的知识点,就是关于两个类的使用。ProgressDialog,AlertDialog这两个类,主要讲解了如何使用它们的方法,以及ProgressDialog在特性,在Thread中使用。

1.4AlertDialog解析

AlertDialog extens Dialog implents DialogInterface

三个子类:DataPicker,ProgressDialog,TimePickerDialog

接下来,看看APIGuida有什么惊喜呢?

AlertDialog

A dialog that can show a title, up to three buttons, a list of selectable items, or a custom layout.

通过这句话,我知道了飞哥的不易,把AlertDialog的功能全用了一遍,the,I  Knowed  it,and did it

DatePickerDialog or TimePickerDialog

A dialog with a pre-defined UI that allows the user to select a date or time.

一个提前定义好的对话框,允许用户选择时间或日期

you should use a DialogFragment as a container for your dialog. The DialogFragment class provides all the controls you need to create your dialog and manage its appearance, instead of calling methods on the Dialog object

看到这句话,不知道你有何感想-感觉前面的代码没用了有木有,大Boss是这个DialogFragment呀!不要急,请看后面。

简单的说:1.正确的处理Dialog的生命周期

2.对话框的简单利用,就像Fragment一样,当成一个组件

3.支持API级别泛围广Android1.6以上均支持,当然需要支持库

这里Google给出一个示例,封装AlertDialog,以复用

public class FireMissilesDialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.dialog_fire_missiles)
               .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // FIRE ZE MISSILES!
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}

当你获取实例后,便可以show了

参考:

FragmentDialog:详解:传送门

Andorid SDK Dialog

扩展阅读:

Full Screen DialogFragment (over ActionBar) in Android:传送门

Android学习笔记-Dialog详解的更多相关文章

  1. Angular6 学习笔记——路由详解

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  2. Angular6 学习笔记——组件详解之组件通讯

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  3. Angular6 学习笔记——组件详解之模板语法

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  4. JavaScript学习笔记-实例详解-类(二)

    实例详解-类(二)   //===给Object.prototype添加只读\不可枚举\不可配置的属性objectId(function(){ Object.defineProperty(Object ...

  5. JavaScript学习笔记-实例详解-类(一)

    实例详解-类(一): //每个javascript函数(除了bind())都自动拥有一个prototype对象// 在未添加属性或重写prototype对象之前,它只包含唯一一个不可枚举属性const ...

  6. Android学习——uses-sdk标签详解

    1 前言 我们都知道,Android的版本在不断的迭代,并且每个版本都加入了不同的新特性.那么随着Android的用户量越来越多,Android的开发人员就必须熟悉Android各个版本的特性并且确保 ...

  7. Android学习之 Intent详解

    一. Intent 作用 Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯.比如说调用startActivity()来 ...

  8. android 开发 对话框Dialog详解

    转载请注明出处:红亮的专栏:http://blog.csdn.net/liang5630/article/details/44098899 Android中的对话框形式大致可分为五种:分别是一般对话框 ...

  9. android学习——GestureDetector.OnGestureListener 详解

    Android Touch Screen 与传统Click Touch Screen不同,会有一些手势(Gesture),例如Fling,Scroll等等.这些Gesture会使用户体验大大提升.An ...

随机推荐

  1. Android提供了5种方式存储数据:

    --使用SharedPreferences存储数据: --文件存储数据: --SQLite数据库存储数据: --使用ContentProvider存储数据: --网络存储数据: 一:使用SharedP ...

  2. poj - 2431 Expedition (优先队列)

    http://poj.org/problem?id=2431 你需要驾驶一辆卡车做一次长途旅行,但是卡车每走一单位就会消耗掉一单位的油,如果没有油就走不了,为了修复卡车,卡车需要被开到距离最近的城镇, ...

  3. Hopfield模型

    1982年,J.Hopfield提出了可用作联想存储器的互连网络,这个网络称为Hopfield网络模型,也称Hopfield模型.Hopfield神经网络模型是一种循环神经网络,从输出到输入有反馈连接 ...

  4. cocos2dx Android 环境搭建 以及 ndk调试

    最近在学习cocos2dx,真的很强大,使我们更专注于游戏趣味,免去了繁琐的底层框架代码. cocos2dx的最强大之处当然在于跨平台.跨平台首选当然是Android,好记性不如烂笔头,记下本文分享给 ...

  5. jQuery_效果(隐藏和显示)

    一.jQuery hide() 显示和 show()隐藏 通过 jQuery,您可以使用 hide() 和 show() 方法来隐藏和显示 HTML 元素: <script type=" ...

  6. bzoj4199

    看到这题我就伤心,当初想到了正解却因为各种sb原因没有写…… 好吧,其实我的正解是比较挫的…… 大家似乎都用了后缀数组,我用了后缀自动机(后缀树) 其实SAM是很好想得,用SAM建出后缀树后 我们考虑 ...

  7. linux嵌入式系统驱动程序的阻塞与异步

    对于那些需要进程独占的设备,需要使用linux提供的阻塞编程.步骤如下: 1.在设备驱动程序中定义该设备的进程等待列多,并将其初始化 static wait_queue_head_t wait_que ...

  8. Balsamiq Mockups简单介绍(UI草图绘制工具)

    什么是Balsamiq Mockups Balsamiq Mockups出自加利福尼亚州的Balsamiq工作室,创始人Peldi在2008年6月推出了这款手绘风格的产品原型设计工具,并广受好评.2年 ...

  9. Linux Autotools

    /********************************************************************** * Linux Autotools * 说明: * 我们 ...

  10. 09day2

    多米诺骨牌 递推+高精度 [问题描述] Jzabc 对多米诺骨牌有很大兴趣,然而他的骨牌比较特别,只有黑色的和白色的两种.他觉得如果存在连续三个骨牌是同一种颜色,那么这个骨牌排列便是不美观的.现在他有 ...