首页 > 代码库 > Android百日程序:进度条对话框实现

Android百日程序:进度条对话框实现

显示由Activity管理的dialog。

这种dialog有多种多样,其中比较常见的是loading的时候,显示的一个loading进度条。

Android显示这样的进度条还是非常方便的,因为有现成的模块可以调用。

首先看看本程序的效果吧:

1 主界面:


2 点击这个按钮之后,显示:


进度条到了100的时候就会自动关闭,当然这里是模拟下载,真实的下载算法还需要继续完善,不过也是很简单的算法了,不算是难点。

点击Cancel或者OK按钮也可以调用函数,进行有需要的操作,这里直接显示一个Toast(简单短暂的对话框)提示。不截图了。


步骤:

新建项目之后,用以下代码做出主界面:

<?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" >

    <Button
        android:id="@+id/dialog_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:onClick="onClick"
        android:text="@string/dialog_button" />
  
</LinearLayout>

然后是逻辑代码:

package su.dialog.dialog;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {
	ProgressDialog progressDialog;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void onClick(View v) {
		showDialog(1);
		progressDialog.setProgress(0);

		new Thread(new Runnable() {
			public void run() {
				for (int i = 1; i <= 15; i++) {
					try {
						Thread.sleep(1000);
						progressDialog
								.incrementProgressBy((int) (100.f / 15.f));
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				progressDialog.dismiss();
			}
		}).start();
	}

	@Override
	protected Dialog onCreateDialog(int id) {
		progressDialog = new ProgressDialog(this);
		progressDialog.setIcon(R.drawable.ic_launcher);
		progressDialog.setTitle("Downloading files...");
		progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						Toast.makeText(getBaseContext(), "OK clicked!",
								Toast.LENGTH_SHORT).show();
					}
				});
		progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						Toast.makeText(getBaseContext(), "Cancel clicked!",
								Toast.LENGTH_SHORT).show();
					}
				});
		return progressDialog;
	}
}

showDialog()函数已经是deprecated的函数了,可以参照:http://stackoverflow.com/questions/10285047/showdialog-deprecated-whats-the-alternative


知识点:

1 点击事件是在xml中声明的了,就是这句:android:onClick = "onClick";后面的"onClick"就是自己定义的函数,可以为任意名字,只要xml的名字和逻辑代码中的名字一致就可以驱动点击事件了。

2 模块ProgressDialog类有点复杂,其实也是一些属性的设置和函数调用罢了,理解起来不难,细心看代码就行了。




Android百日程序:进度条对话框实现