• 第34讲 UI组件之 ProgressDialog和Message


    34UI组件之 ProgressDialogMessage

    1.进度对话框 ProgressDialog

    <1>简介

    ProgressDialog是AlertDialog类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。

    一个对话框中显示一个进步指标和一个可选的文本信息或一个视图。只有文本信息或一个视图,可以同时使用。

    对话框可以按back键取消。

    <2>方法

    setProgressStyle()

    设置进度条风格

    setTitle()

    设置ProgressDialog 标题

    setMessage()

    设置ProgressDialog 提示信息

    setIcon()

    设置ProgressDialog 标题图标

    setIndeterminate()

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

    setCancelable()

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

    setButton()

    设置ProgressDialog 的一个Button

    setProgress()

    设置ProgressDialog 进度条进度

    show()

    显示ProgressDialog

    1.弹出一个进度对话框,只有一个无限循环的小圆圈。

    public void test1(View view) {

    ProgressDialog dialog=new ProgressDialog(this);

    dialog.setTitle("标题信息");                                      //设置ProgressDialog标题

    dialog.setMessage("正在下载...");                //设置ProgressDialog 提示信息

    dialog.show();                                                        //显示ProgressDialog

    }

    2.弹出一个对话框,显示一个水平进度条

    public void test2(View view) {

    ProgressDialog dialog=new ProgressDialog(this);

    dialog.setTitle("标题信息");                                      //设置ProgressDialog标题

    dialog.setMessage("正在下载...");                //设置ProgressDialog 提示信息

    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   //水平方向的进度条

    dialog.setMax(100);                                             //设置长度

    dialog.incrementProgressBy(10);                     //指定增加的进度

    dialog.show();                                                        //显示ProgressDialog

    }

    3.将耗时任务与更新UI组件解耦,使用handleMessage方法。

    首先需要在UI主线程中定义一个handler,用于接收其他线程中传递过来的message。

    private Handler handler=new Handler(newCallback() {

    public boolean handleMessage(Message msg) {

    /更新UI组件的工作,就放置到这里。   

    //通过msg可以传递信息,来改变流程的走向。

    //同时把不变的代码进行封装,把变化的部分通过参数msg传递。 msg对象需要具有应对所有变化的能力。

    ProgressDialog dialog=(ProgressDialog)msg.obj;

    dialog.cancel();

    if(msg.arg1 == 1){

             textView.setText("下载成功!!");

    }else{

             textView.setText("下载失败!!");

    }

    return false;

    }

    });

    然后在其他线程中,设置一个message。该msg将其余线程中的dialog传递给了handler接收,从而修改了dialog。

    public void test1(View view) {

    ProgressDialog dialog=new ProgressDialog(this);

    dialog.setTitle("标题信息");                                      //设置ProgressDialog 标题

    dialog.setMessage("正在下载...");                //设置ProgressDialog 提示信息

    dialog.show();                                                        //显示ProgressDialog

    new Thread(new Runable(){

    public void run(){

    try{

    Thread.sleep(6000);

    }

    catch(InterruptedException e){

    e.printStackTrace();

    }

    Message msg=new Message();

    msg.obj=dialog;

    msg.arg1 = 1;                              //1 下载成功;

    //msg.arg1 = 2;                           //2 下载失败;

    handler.sendMessage(msg);

    //也可以设置一个flag,传递一些状态信息

    }

    });

    }

  • 相关阅读:
    C#将JSON字符串对象序列化与反序列化
    Chrome 中的 JavaScript 断点设置和调试技巧
    JS 关闭 页面 浏览器 事件
    使用Jquery向一个空白网页动态创建一个iframe,及嵌入页面,和向嵌入页面传参
    js/jquery判断浏览器的方法小结
    Javascript中document.execCommand()的用法
    js 点击默认另存 ,不是打开 Blob 操作
    浅析jQuery删除节点的三个方法
    IE 和Firefox的js兼容性总结
    removeNode is not defined removeNode is not a function
  • 原文地址:https://www.cnblogs.com/anyuan9/p/6171588.html
Copyright © 2020-2023  润新知