前言

  对话框对于应用也是必不可少的一个组件,在Android中也不例外,对话框对于一些提示重要信息,或者一些需要用户额外交互的一些内容很有帮 助。本篇博客就讲解一下Android下对话框的使用,在本篇博客中,将了解到对话框的一些常规属性的设置,以及各式的对话框的使用,并都会提供小 Demo来展示所有的效果。

Dialog

  Dialog,对话框,一个对话框就是一个小窗口,并不会填满整个屏幕,通常是以模态显示,要求用户必须采取行动才能继续进行剩下的操作。

  Android提供了丰富的对话框支持,它提供了如下4中常用的对话框:

  • AlertDialog:警告对话框,使用最广泛功能最丰富的一个对话框。
  • ProgressDialog:进度条对话框,只是对进度条进行了简单的封装。
  • DatePickerDialog:日期对话框。
  • TimePickerDialog:时间对话框。

  所有的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其他的几个类均继承自AlterDialog。

AlertDialog

  AlertDialog继承自Dialog类,对于Android内置的AlterDialog,它可以包含一个标题、一个内容消息或者一个选择列表、最多三个按钮。而创建AlterDialog推荐使用它的一个内部类AlterDialog.Builder创 建。使用Builder对象,可以设置AlterDialog的各种属性,最后通过Builder.create()就可以得到AlterDialog对 象,显示这个AlterDialog一般可以直接使用Builder.show()方法,它会返回一个AlterDialog对象,并且 显示它。

  如果仅仅是需要提示一段信息给用户,那么就可以直接使用AlterDialog的一些属性设置提示信息,涉及到的方法有:

  • AlterDialog create():根据设置的属性,创建一个AlterDialog。
  • AlterDialog show():根据设置的属性,创建一个AlterDialog,并且显示在屏幕上。
  • AlterDialog.Builder setTitle():设置标题。
  • AlterDialog.Builder setIcon():设置标题的图标。
  • AlterDialog.Builder setMessage():设置标题的内容。
  • AlterDialog.Builder setCancelable():设置是否模态,一般设置为false,表示模态,要求用户必须采取行动才能继续进行剩下的操作。

  Tips:AlterDialog.Builder的很多设置属性的方法,返回的均是这个AlterDialog.Builder对象,所以可以使用链式方式编写代码,这样更方便。

  当一个对话框调用了show()方法后,展示到屏幕上,如果需要消除它,可以使用DialogInterface接口声明的两个方 法,cancel()和dismiss()使对话框取或者消除,这两个方法的作用是一样的,不过推荐使用dismiss()。Dialog和 AlterDialog都实现了DialogInterface接口,所以只要是对话框,均可以使用这两个方法来消除对话框。

  下面通过一个简单的Demo,先看看AlterDialog是如何提示信息的:

1 package com.example.test;
 2 
 3 import android.app.Activity;
 4 import android.app.AlertDialog;
 5 import android.content.DialogInterface;
 6 import android.content.DialogInterface.OnClickListener;
 7 import android.os.Bundle;
 8 import android.view.Menu;
 9 import android.view.View;
10 import android.widget.Button;
11 
12 
13 
14 public class MainActivity extends Activity {
15     
16     
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22     Button alert=(Button) findViewById(R.id.btn_putong);
23     
24     
25     
26     }
27     
28     public void alertdilog(View v) {
29         AlertDialog.Builder  builder=new AlertDialog.Builder(this);//或者Builder  builder=new AlertDialog.Builder(this)
30         builder.setTitle("提示");//设置标题
31         builder.setMessage("这是一个普通的对话框");//设置内容
32         builder.setIcon(R.drawable.ic_launcher);//设置对话框图片
33         builder.setCancelable(false);//设置是否模态,一般设置为false,表示模态,要求用户必须采取行动才能继续进行剩下的操作。
34         builder.setPositiveButton("知道了", new DialogInterface.OnClickListener() {
35             
36             @Override
37             public void onClick(DialogInterface dialog, int which) {
38                 dialog.cancel();
39                 
40             }
41         });
42         builder.create().show();
43         
44 
45     }
46     
47     
48 
49     @Override
50     public boolean onCreateOptionsMenu(Menu menu) {
51         // Inflate the menu; this adds items to the action bar if it is present.
52         getMenuInflater().inflate(R.menu.main, menu);
53         return true;
54     }
55 
56 }

 

AlterDialog的按钮

  AlterDialog内置了三个按钮,可以直接使用setXxxButton()方法进行设置,对于一般的对话框,使用三个按钮基本上也够用了,下面是这三个方法的签名:

  • AlterDialog.Builder setPositiveButton(CharSquence text , DialogInterFace.OnClickListener):一个积极的按钮,一般用于“OK”或者“继续”等操作。
  • AlterDialog.Builder setNegativeButton(CharSquence text , DialogInterFace.OnClickListener):一个负面的按钮,一般用于“取消”操作。
  • AlterDialog.Builder setNeutralButton(CharSquence text , DialogInterFace.OnClickListener):一个比较中性的按钮,一般用于“忽略”、“以后提醒我”等操作。

  上面介绍的DialogInterface接口,还提供了一系列的事件响应,这三个按钮均需要传递一个 DialogInterFace.OnClickListener接口对象,实现其点击事件的触发,在这个接口中需要实现一个 onClick(DialogInterface dialog,int which),dialog为当前触发事件的对话框对象接口,可以直接强制转换为AlterDialog进行操作;which为点击按钮的标识符,是一个 整形的数据,对于这三个按钮而言,每个按钮使用不同的int类型数据进行标识:Positive(-1)、Negative(-2)、 Neutral(-3)。

  而除了专门为按钮点击实现的DialogInterFace.OnClickListener事件外,DialogInterface还提供了 一些其他的事件,供Dialog对象响应,这些事件只是对Dialog声明周期各个状态的响应,一看就明白了,就不再详细讲解了,下面是这几个事件的说 明:

  • interface DialogInterface.OnCancelListener:当对话框调用cancel()方法的时候触发。
  • interface DialogInterface.OnDismissListener:当对话框调用dismiss()方法的时候触发。
  • interface DialogInterface.OnShowListener:当对话框调用show()方法的时候触发。
  • interface DialogInterface.OnMultiChoiceListener:当对话框使用多选列表,并且选中的时候触发。

示例:

package com.example.test2;


import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;


/**
 * 通过 Handler + Message 的方式下载网络数据
 * 通过子线程run()方法中下载数据,使用Message携带数据,然后用Handler发送消息并且处理消息来更新UI.
 * 
 * @author AHuier
 */
public class MainActivity extends Activity {

private Button button1;

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button) findViewById(R.id.button1);
       
        button1.setOnClickListener(new View.OnClickListener() {
             
            @Override
           public void onClick(View v) {
                // TODO Auto-generated method stub
                AlertDialog.Builder builder = new AlertDialog.Builder(
                       MainActivity.this);
                builder.setTitle("提示");
                builder.setMessage("这是一个多按钮普通的对话框!");
               builder.setIcon(R.drawable.ic_launcher);
               builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
 
                    @Override
                    public void onClick(DialogInterface dialog, int which) {                        
                        Toast.makeText(MainActivity.this, "确定被点击",
                               Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                });
                builder.setNegativeButton("否定", new DialogInterface.OnClickListener() {
 
                    @Override
                   public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(MainActivity.this, "否定被点击",
                               Toast.LENGTH_SHORT).show();
                       dialog.dismiss();
                  }
                });
                builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(MainActivity.this, "忽略被点击",
                               Toast.LENGTH_SHORT).show();
                        dialog.cancel();
                    }
                });
                builder.show();
                
            }
        });
        
      
        
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

  
        


}

 

AlterDialog的列表形式

  AlterDialog除了展示一些提示信息,还可以展示一种列表的形式,需要使用到 Builder.setItems(CharSequence[] items,DialogInterface.OnClickListener listener)方法进行设置,它需要传递一个CharSequenece类型的数组,以绑定列表的数据,它同样需要传递一个 DialogInterface.OnClickListener接口,以响应列表项的点击,而这个接口中onClick方法的which参数,为当前点 击触发项的items中的下标。

  示例:

package com.example.test2;


import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;


/**
 * 通过 Handler + Message 的方式下载网络数据
 * 通过子线程run()方法中下载数据,使用Message携带数据,然后用Handler发送消息并且处理消息来更新UI.
 * 
 * @author AHuier
 */
public class MainActivity extends Activity {

private Button button1;

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button) findViewById(R.id.button1);
       
        button1.setOnClickListener(new View.OnClickListener() {
             
            
                 
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                   AlertDialog.Builder builder = new AlertDialog.Builder(
                           MainActivity.this);
                    builder.setTitle("请选择城市");
                    //items使用全局的finalCharSequenece数组声明
                    final String items[]={"北京","上海","济南","滨州"};
                    builder.setItems(items, new OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                            String select_item = items[which];
                            Toast.makeText(MainActivity.this,
                                    "选择了---》" + select_item, Toast.LENGTH_SHORT)
                                    .show();
                        }
                    });
                    builder.show();
                }
            });
 
        
      
        
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

  
        


}

AlterDialog的单选列表

  AlterDialog还可以使用一种单选的列表样式,使用 Builder.setSingleChoiceItems(CharSequenece[] items,int checkedItem,DialogInterface.OnClickListener listener),这个方法具有多项重载,主要是为了应对不同的数据源,items为列表项数组,checkedItem为初始选项,listener 为点击响应事件。有时候并不一定需要选中之后就关闭对话框,可以设置两个按钮,用于确定选择。

package com.example.test2;


import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;


/**
 * 通过 Handler + Message 的方式下载网络数据
 * 通过子线程run()方法中下载数据,使用Message携带数据,然后用Handler发送消息并且处理消息来更新UI.
 * 
 * @author AHuier
 */
public class MainActivity extends Activity {

private Button button1;

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button) findViewById(R.id.button1);
       
        button1.setOnClickListener(new View.OnClickListener() {
             
            
                 
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                   AlertDialog.Builder builder = new AlertDialog.Builder(
                           MainActivity.this);
                    builder.setTitle("请选择城市");
                    //items使用全局的finalCharSequenece数组声明
                    final String items[]={"北京","上海","济南","滨州"};
                    builder.setSingleChoiceItems(items, 1, new OnClickListener() {
                        
                          public void onClick(DialogInterface dialog, int which) {
                              // TODO Auto-generated method stub
                              String select_item = items[which];
                              Toast.makeText(MainActivity.this,
                                      "选择了---》" + select_item, Toast.LENGTH_SHORT)
                                      .show();
                          }
                          
                          
                      });
                builder.setPositiveButton("确定", new OnClickListener() {
                    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        
                         dialog.dismiss();
                    }
                });  
                
                builder.show();
                
                }
               
                
                });
        
        
        }
                
                    
             
     
 
        
      
        
        


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

  
        


}

 

AlterDialog多选列表

  AlterDialog除了单选列表,还有多选的列表。可以使用 Builder.setMultiChoiceItems(CharSequence[] items,boolean[] checkedItems,DialogInterface.OnMultiChoiceClickListener listener),这个方法也同样具有多样重载,对于这个方法,items以一个数组为数据源;checkedItems是默认的选项,因为是多选列 表,所以如果设置需要全部设置,如果没有默认选中,则传Null;listener为多选项点击触发事件。

  示例:

package com.example.test2;


import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;


/**
 * 通过 Handler + Message 的方式下载网络数据
 * 通过子线程run()方法中下载数据,使用Message携带数据,然后用Handler发送消息并且处理消息来更新UI.
 * 
 * @author AHuier
 */
public class MainActivity extends Activity {

private Button button1;

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button) findViewById(R.id.button1);
       
        button1.setOnClickListener(new View.OnClickListener() {
             
            
                 
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                   AlertDialog.Builder builder = new AlertDialog.Builder(
                           MainActivity.this);
                    builder.setTitle("请选择城市");
                    //items使用全局的finalCharSequenece数组声明
                    final String items[]={"北京","上海","济南","滨州"};
                 
                    
                    
                    builder.setMultiChoiceItems(items, null, new OnMultiChoiceClickListener() {
                        
                        @Override
                        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                               String select_item = items[which];
                                  Toast.makeText(MainActivity.this,
                                          "选择了---》" + select_item, Toast.LENGTH_SHORT)
                                          .show();
                            
                        }
                    });
                builder.setPositiveButton("确定", new OnClickListener() {
                    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        
                         dialog.dismiss();
                    }
                });  
                
                builder.show();
                
                }
               
                
                });
        
        
        }
                
                    
             
     
 
        
      
        
        


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

  
        


}

AlertDialog自定义样式

  有些时候,Android自带的一些样式设置已经无法满足需求了,那么可以使用自定义样式,自定义个XML布局文件,用这个文件的内容作为 AlertDialog的样式展示在屏幕上,这样就可以灵活定制对话框了。对于定制的XML文件,可以使用 LayoutInflater.from(Context).inflate(int,ViewGroup)的方式对其进行动态加载,然后使用 Builder.setView(View)把加载的视图与Builder对象进行关联,最后正常show()即可。

  

package com.example.test2;


import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;


/**
 * 通过 Handler + Message 的方式下载网络数据
 * 通过子线程run()方法中下载数据,使用Message携带数据,然后用Handler发送消息并且处理消息来更新UI.
 * 
 * @author AHuier
 */
public class MainActivity extends Activity {

private Button button1;

    private AlertDialog alertDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button) findViewById(R.id.button1);
       
        button1.setOnClickListener(new View.OnClickListener() {
             
            
                 
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                   AlertDialog.Builder builder = new AlertDialog.Builder(
                           MainActivity.this);
                   alertDialog=builder.create();
                   // 添加自定义的布局文件
                 View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.myalert, null);
                 
                 Button btn=(Button) view.findViewById(R.id.btn);
                 btn.setOnClickListener(new View.OnClickListener() {
                    
                    @Override
                    public void onClick(View v) {
                    Log.i("TAG", "<<<<<<<<<<<<<<<<<<<");
                    alertDialog.dismiss();
                    
                    }
                });
                 
                 
                 
                 builder.setView(view);
                 alertDialog=  builder.show();
                    
                  
                
                }
               
                
                });
        
        
        }
                
                    
             
     
 
        
      
        
        


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

  
        


}

ProgressDialog

  有些时候,只是需要提示用户等待,比如在执行耗时操作等的时候,可以使用进度对话框来显示一个进度信息,提示用户等待,这个时候可以使用 ProgressDialog。ProgressDialog的使用方式大部分可以参见ProgressBar,其实就是一个封装了 ProgressBar的对话框。

  ProgressDialog有 两种显示方式,一种是以一个滚动的环状图标,可以显示一个标题和一段文本内容的等待对话框;另外一种是带刻度的进度条,和常规的进度条用法一致。两种样式 通过ProgressDialog.setProgressStyle(int style)设置,可以通过ProgressDialog的两个常量进行设置:STYLE_HORIZONTAL:刻度滚 动;STYLE_SPINNER:图标滚动,默认选项。

  对于图标滚动,可以使用两种方式实现,一种是常规的调用构造函数,再设置对应的属性;另外一种是直接使用ProgressDialog的静态方法show(),直接返回一个ProgressDialog对象,并且调用show()方法。

  示例:

package com.example.test2;


import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;


/**
 * 通过 Handler + Message 的方式下载网络数据
 * 通过子线程run()方法中下载数据,使用Message携带数据,然后用Handler发送消息并且处理消息来更新UI.
 * 
 * @author AHuier
 */
public class MainActivity extends Activity {

private Button button1;


ProgressDialog dialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button) findViewById(R.id.button1);
 
         dialog=new ProgressDialog(MainActivity.this);
        dialog.setTitle("等待");
        dialog.setIcon(R.drawable.ic_launcher);
        dialog.setMessage("正在加载");
        dialog.show();
       
 
        thread.start();
        
        
        }
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.arg1==1){
                
            dialog.dismiss();    
                
            }
            super.handleMessage(msg);
        }
    };
                
        Thread thread=new Thread(){
            public void run() {
                
                try {
                    sleep(5000);
                    
                    Message message=Message.obtain();
                    message.arg1=1;
                    handler.sendMessage(message);
                    
                    
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                
            };
            
        };            
             
     
 
        
      
        
        


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

  
        


}

刻度滚动

package com.example.test2;


import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;


/**
 * 通过 Handler + Message 的方式下载网络数据
 * 通过子线程run()方法中下载数据,使用Message携带数据,然后用Handler发送消息并且处理消息来更新UI.
 * 
 * @author AHuier
 */
public class MainActivity extends Activity {

private Button button1;


ProgressDialog dialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=(Button) findViewById(R.id.button1);
 
         dialog=new ProgressDialog(MainActivity.this);
         dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setTitle("等待");
        dialog.setIcon(R.drawable.ic_launcher);
        dialog.setMessage("正在加载");
        dialog.show();
       
 
        thread.start();
        
        
        }
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            
            
            if(msg.arg1==100){
                dialog.setProgress(msg.arg1);
            dialog.dismiss();
            
                
            }
             dialog.setProgress(msg.arg1);
            
        }
    };
                
        Thread thread=new Thread(){
            public void run() {
                
                try {
                    
                    
                    
                    for(int i=0;i<=100;i++){
                        //重新获取消息对象
                        Message message=Message.obtain();
                        message.arg1=i;
                        
                        handler.sendMessage(message);
                        sleep(1000);
                    }
                    
                    
                    
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                
            };
            
        };            
             
     
 
        
      
        
        


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

  
        


}