iqingfen 2012-03-06
Android中ProgressDialog的使用:http://skycode.iteye.com/blog/346960
Android中ProgressDialog的简单示例:http://lveyo.iteye.com/blog/585771
AndroidProgressDialog的两种用法:http://www.pocketdigi.com/20110510/271.html
在android中,通常我们无法在单独的线程中更新UI,而要在主线程中,这也就是为什么我们要使用Handler了,当handler收到消息中,它会把它放入到队列中等待执行,通常来说这会很快被执行。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textview1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ShowProgressDialog" /> </LinearLayout>
package com.progress.dialog; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; public class ProgressDialogActivity extends Activity { /** Called when the activity is first created. */ private Button button1; private TextView textview1; private ProgressDialog progressDialog; private Handler handler = new Handler(){ @Override public void handleMessage(android.os.Message msg) { try { if (progressDialog != null) { progressDialog.dismiss(); } textview1.setText("关闭等待框."); } catch (Exception e) { // TODO: handle exception Log.v("ProgressDialogActivity", e.getMessage()); } }; }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button1 = (Button) findViewById(R.id.button1); textview1 = (TextView)findViewById(R.id.textview1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 创建并赋值给 progressDialog progressDialog = ProgressDialog.show(ProgressDialogActivity.this, "我的标题", "[3秒后关闭]Load......", true, false); textview1.setText("显示等待框."); //创建线程并启动 new Thread(new Runnable(){ @Override public void run() { try { Thread.sleep(3000); handler.sendEmptyMessage(0); } catch (Exception e) { e.printStackTrace(); } } }).start(); } }); } }
ProgressDialog,顾名思义,就是一个进度对话框,常用于显示载入进度、下载进度等。合理使用ProgressDialog能增加用户体验,让用户知道现在程序所处的状态。
下面是两种用法,第一种适合复杂环境,可以自定义风格,添加按钮等,而第二种只能简单的显示一个只有标题和信息的ProgressDialog
package com.pocketdigi.ProgressDialog; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Main extends Activity { /** Called when the activity is first created. */ ProgressDialog pd1, pd2; Button b1, b2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b1 = (Button) findViewById(R.id.b1); b2 = (Button) findViewById(R.id.b2); b1.setOnClickListener(showPd1); b2.setOnClickListener(showPd2); } OnClickListener showPd1 = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub pd1 = new ProgressDialog(Main.this); pd1.setTitle("PD1标题"); pd1.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 转圈风格 // 进度条风格为ProgressDialog.STYLE_HORIZONTAL,使用setMax,setProgress,incrementProgressBy方法设置进度 pd1.setMessage("PD1信息"); pd1.setButton("关闭", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub pd1.dismiss(); } }); //可以使用setButton2,setButton3来添加更多按钮 pd1.setCancelable(false);//不可被返回键取消对话框 pd1.show(); } }; OnClickListener showPd2 = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub pd2=ProgressDialog.show(Main.this,"PD2标题","PD2信息"); //使用该方法将不能再设置按钮,适合显示简单的ProgressDialog } }; }