سبد (0)

ابزار نمایش ProgressBar

ProgressBar

ابزار ProgressBar برای نمایش دادن پیشرفت یک عملیاتی که در حال انجام شدن است,می باشد.این عملیات می توانند هم قابل مشاهده باشند و هم در پس زمینه در حال رخ دادن باشند.به عنوان مثال زمانی که در حال دانلود یک سری Data از یک سایت هستید و قصد دارید که کاربر از پیشرفت عملیات دانلود مطلع باشد,در این موارد بهترین انتخاب استفاده از ابزار نمایش ProgressBar است.

1.با استفاده از ایکلیپس یک پروژه جدید با نام BasicView2 ایجاد کنید.

2.فایل main.xml که در res/layout قرار دارد را به صورت زیر تغییر دهید:

 

<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent” >
<ProgressBar android:id=”@+id/progressbar”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content” />
</LinearLayout>

3.فایل MainActivity.java را به صورت زیر تغییر دهید:

 

package net.learn2develop.BasicViews2;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
private static int progress;
private ProgressBar progressBar;
private int progressStatus = 0;
private Handler handler = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progress = 0;
progressBar = (ProgressBar) findViewById(R.id.progressbar);
//---do some work in background thread---
new Thread(new Runnable()
{
public void run()
{
//---do some work here---
while (progressStatus < 10)
{
progressStatus = doSomeWork();
}
//---hides the progress bar---
handler.post(new Runnable()
{
public void run()
{
//---0 - VISIBLE; 4 - INVISIBLE; 8 - GONE---
progressBar.setVisibility(8);
}
});
}
//---do some long lasting work here---
private int doSomeWork()
{
try {
//---simulate doing some work---
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
return ++progress;
}
}).start();
}
}

4.با استفاده از کلید F11 برنامه را در امولاتور اجرا کنید.

روش کار

در ProgressBar حالت پیش فرض به صورت indeterminate است(منظور یک دایره ی در حال چرخش),از این حالت زمانی استفاده می شود که یک تایم مشخصی برای پایان یک عملیات تعریف نشده است.به عنوان مثال وقتی شما یک سری داده را به یک وب سرویس ارسال می کنید و منتظر دریافت پاسخ هستید.اگر یک عنصر progressBar را به صورت خیلی ساده در فایل main.xml قرار دهید, ابزاری را نمایش می دهد که بطور مداوم در حال چرخش است.اختیار این با شماست که زمانی که عملیات در پس زمینه تمام شد آن را متوقف دارید.کدی که به فایل جاوا اضافه کردید نشان دهنده ی این است که چطور می توانید با استفاده از یک thread چرخش در پس زمینه را خاموش کنید و انجام یک وظیفه طولانی مدت را شبیه سازی کنید و از آن برای نمایش پیشرفت استفاد ه کنید.برای این کار از کلاس Thread همراه با یک شئ Runnable استفاده کنید.متد()run اجزا thread را بر عهده دارد,که در این مورد متد ()doSomeWork را برای شبیه سازی کردن انجام بعضی کارها فراخوانی می کند.بعد از این که شبیه سازی به پایان رسید(حدوداً بعد از 5 ثانیه),از یک شئ Handler برای ارسال یک پیام به thread جهت توقف ProgressBar استفاده می کنیم:

 

//---do some work in background thread---
new Thread(new Runnable()
{
public void run()
{
//---do some work here---
while (progressStatus < 10)
{
progressStatus = doSomeWork();
}
//---hides the progress bar---
handler.post(new Runnable()
{
public void run()
{
//---0 - VISIBLE; 4 - INVISIBLE; 8 - GONE---
progressBar.setVisibility(8);
}
});
}
//---do some long lasting work here---
private int doSomeWork()
{
try {
//---simulate doing some work---
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
return ++progress;
}
}).start();

وقتی این عملیات کامل شد, ابزار ProgressBar را بوسیله خصوصیت visibility که مقدار آن را برابر GONE (مقدار 8) قرار داده ایم,پنهان می کنیم.تفاوتی که بین مقدار INVISIBLE و ثابت GONE وجود دارد,این است که وقتی از INVISIBLE استفاده می کنید,ProgressBar تنها پنهان می شود ولی همچنان فضایی را که در اکتیویتی اشغال کرده بود,در تصرف خود دارد.اما زمانی که از GONE استفاده می کنید,دیگر ProgressBar فضایی از اکتیویتی را اشغال نکرده است.

در ادامه خواهید دید که چگونه شکل و شمایل ProgressBar را عوض کنید:

1.در همان پروژه ی قبل,فایل main.xml را به صورت زیر تغییر دهید:

 

<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent” >
<ProgressBar android:id=”@+id/progressbar”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
style=”?android:attr/progressBarStyleHorizontal” />
</LinearLayout>

2.فایل MainActivity.java را به صورت زیر اصلاح کنید:

 

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progress = 0;
progressBar = (ProgressBar) findViewById(R.id.progressbar);
progressBar.setMax(200);
//---do some work in background thread---
new Thread(new Runnable()
{
public void run()
{
//---do some work here---
while (progressStatus < 100)
{
progressStatus = doSomeWork();
//---Update the progress bar---
handler.post(new Runnable()
{
public void run() {
progressBar.setProgress(progressStatus);
}
});
}
//---hides the progress bar---
handler.post(new Runnable()
{
public void run()
{
//---0 - VISIBLE; 4 - INVISIBLE; 8 - GONE---
progressBar.setVisibility(8);
}
});
}
//---do some long lasting work here---
private int doSomeWork()
{
try {
//---simulate doing some work---
Thread.sleep(50);
} catch (InterruptedException e)
{
e.printStackTrace();
}
return ++progress;
}
}).start();
}

3.با استفاده از کلید F11 برنامه را اجرا کنید.

در تصویر زیر ProgressBar را در حالت نمایش پیشرفت 50% نشان می دهد:

روش کار

برای نمایش ProgressBar به صورت عمودی,به سادگی می توانید خصوصیت style را به صورت زیر تنظیم کنید:

 

<ProgressBar android:id=”@+id/progressbar”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
style=”?android:attr/progressBarStyleHorizontal” />

برای نمایش پیشرفت کار متد ()setProgress را فراخوانی کنید و یک عددی را که نشان دهنده ی پیشرفت است را به آن ارسال کنید:

 

//---Update the progress bar---
handler.post(new Runnable()
{
public void run() {
progressBar.setProgress(progressStatus);
}
});

در این مثال محدوده ی ProgressBar را بین 0 تا 200 در نظر گرفته ایم (بوسیله ی متد ()setMax).اما زمانی که ProgressBar به حد وسط می رسد,ناپدید می گردد(این در حالی است که هنوز متد ()doSoneWork فراخوانی می شود و progressStatud کمتر از 100 است).برای اطمینان از اینکه ProgressBar تا اتمام 100% کار محو نمی گردد,مقدار حداکثر را برابر 100 قرار دهید و یا اینکه به روشی حلقه ی while را بنویسید تا آنقدر تکرار شود تا مقدار ProgressStatus به 200 برسد.مانند زیر:

 

//---do some work here---
while (progressStatus < 200)
تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehiمجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامیپرداخت آنلاین -  بانک ملتمعرفی بیاموز در شبکه سهپرداخت آنلاین - بانک اقتصاد نوینپرداخت آنلاین - بانک سامان