显示由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类有点复杂,其实也是一些属性的设置和函数调用罢了,理解起来不难,细心看代码就行了。