ProgressDialog类似于ProgressBar类。
用于显示一个过程,通常用于耗时操作。
几个方法介绍:
1.setMax()
设置对话框中进度条的最大值。
2.setTile()
设置标题。
3.setProgressStyl()
设置对话框中进度条的样式。例如:环形和水平。
参数:
ProgressDialog.STYLE_SPINNER 环形精度条
ProgressDialog.STYLE_HORIZONTAL 水平样式的进度条
4.setMessage()
设置显示的内容。
演示实例:
用于模拟一个耗时的连接操作。
图:
MainActivity.java
public class MainActivity extends Activity {Button button, button2;ProgressDialog progressDialog;public final static String ABOUT_SERVER = "Connect";// 信息广播接收BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context c, Intent intent) {String str = intent.getStringExtra("DATA");if (str.equals("0")) {progressDialog.setMessage("开始连接");} else if (str.equals("1")) {progressDialog.setMessage("连接完毕");} else {progressDialog.dismiss();}}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 注册广播监听IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(ABOUT_SERVER);registerReceiver(broadcastReceiver, intentFilter);}public void click(View v) {progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);progressDialog.setMessage("准备建立连接·············");progressDialog.show();Intent intent = new Intent(MainActivity.this, ServerActivity.class);startService(intent);}}activity_main.xml<LinearLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="${relativePackage}.${activityClass}" ><Buttonandroid:id="@+id/but"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="click"android:text="点击" /></LinearLayout>ServerActivity.javapublic class ServerActivity extends Service {Handler handler = new Handler() {public void handleMessage(Message msg) {Intent intent = new Intent(MainActivity.ABOUT_SERVER);if (msg.what == 0) {intent.putExtra("DATA", "0");} else if (msg.what == 1) {intent.putExtra("DATA", "1");} else {intent.putExtra("DATA", "2");ServerActivity.this.stopSelf();}sendBroadcast(intent);};};@Overridepublic void onCreate() {super.onCreate();Thread thread = new Thread(new Runnable() {@Overridepublic void run() {// 要做的事try {for (int i = 0; i < 3; i++) {Thread.sleep(1000);Message message = new Message();message.what = i;handler.sendMessage(message);}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});thread.start();}@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}}AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=""package="com.example.test"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="21" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name" ><service android:name="com.example.test.ServerActivity"></service><activityandroid:name=".MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>在做此实例时,遇到报错,一大串红字,最关键的一句话:This message is already in use.
从网上查得:与handler发送Message相关,消息已经在消息队列了,而且正被使用,,而如果往同一个队列发送相同的对象就会报错。
造成这个错误是因为:
梦想,并不奢侈,只要勇敢地迈出第一步。