آموزش برنامه نویسی اندروید فصل سوم
آموزش اندروید فصل سوم قسمت نهم – ابزارهای نمایش
تیر ۹, ۱۳۹۵
آموزش برنامه نویسی اندروید فصل سوم
آموزش اندروید فصل سوم قسمت یازدهم – AutoCompleteTextView
تیر ۱۲, ۱۳۹۵
آموزش برنامه نویسی اندروید فصل سوم

آموزش برنامه نویسی اندروید فصل سوم

در قسمت بیست و هشتم آموزش اندروید شی ProgressBar یا نوار پیشرفت را معرفی و به طور کامل آموزش داده ایم.

آموزش اندروید فصل سوم قسمت دهم – نوار پیشرفت

توجه : برای مشاهده تصاویر در سایز اصلی برروی آنها کلیک کنید.

ابزار نمایش ProgressBar

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

برای درک بیشتر یک پروژه با نام View2Prj ایجاد کرده و در فایل activity_main.xml یک شی progressBar به صورت زیر ایجاد میکنیم

<ProgressBar

        android:id="@+id/prg1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>

حال در فایل MainActivity.java چنین کدنویسی میکنیم

package com.example.view2prj;



import android.os.Bundle;

import android.app.Activity;

import android.os.Handler;

import android.view.View;

import android.widget.ProgressBar;



public class MainActivity extends Activity {



        static int progress;

        ProgressBar progressBar;

        int progressStatus = 0;

        Handler handler= new Handler();



        @Override

        protected void onCreate(Bundle savedInstanceState) {

                 super.onCreate(savedInstanceState);

                 setContentView(R.layout.activity_main);



                 progress=0;

                 progressBar = (ProgressBar) findViewById(R.id.prg1);



                 //--do some work in back ground--

                 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(View.GONE);

                                              }

                                                        });

                           }

                           //--do some long running work here--

                           private int doSomeWork()

                           {

                                    try{

                                              //--simulate doing some work--

                                              Thread.sleep(500);

                                              }catch (InterruptedException e){

                                                        e.printStackTrace();

                                              }

                                    return ++progress;

                           }

                 }).start();

        }



}

حال برنامه را اجرا کرده و نتیجه را مطابق شکل زیر ببینید

آموزش کاربردی اندروید-قسمت بیست و هشتم

خواهید دید که پس از 5 ثانیه ProgressBar ناپدید خواهد شد.

روش کار

حالت پیشفرض این شی به صورت indeterminate است(به صورت یک دایره در حال چرخش).این حالت برای زمانی مناسب است که زمان مشخصی برای پایان کار در نظر نگرفته باشیم برای مثال زمانی که اطلاعاتی را به یک وب سرور ارسال و منتظر دریافت پاسخ آن هستیم.اگر تنها از شی ProgressBar استفاده کنیم و دستوری در فایل جاوا برای پایان آن ننویسیم این شی  مدام در حال چرخش خواهد بود.

هنگامی که برنامه اجرا میشود سیستم یک Thread از اجرا برای برنامه بنام main ایجاد میکند.این Thread بسیار مهم است چرا که آن مسئول انتقال Eventها به ابزارهای رابط کاربری مناسب مانند Event مربوط به نقاشی است 

پس ما کدی را به فایل جاوای پروژه برای متوقف کردن آن درنظر گرفته ایم که از یک Thread جهت شبیه سازی یک عملیات در پس زمینه استفاده میکند.برای اینکار نیز از یک Thread و یک شی Runnable استفاده کرده ایم.متد ()run اجرای Thread را به عهده دارد که دراین مثال از متد ()doSomeWork برای شبیه سازی عملیات استفاده شده.بعد از اینکه شبیه سازی تمام شد(پس از 5 ثانیه)از یک شی Handler برای ارسال یک پیام به Thraed جهت توقف ProgressBar استفاده میکنیم

//--do some work in back ground--

                 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(View.GONE);

                                              }

                                                        });

                           }

                           //--do some long running work here--

                           private int doSomeWork()

                           {

                                    try{

                                              //--simulate doing some work--

                                              Thread.sleep(500);

                                              }catch (InterruptedException e){

                                                       e.printStackTrace();

                                              }

                                    return ++progress;

                           }

                 }).start();

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

سفارشی سازی ProgressBar

در این تمرین میخواهیم نوعی از ProgressBar را نمایش دهیم که کاربر را از پیشرفت عملیات در حال انجام اگاه میسازد.در همان تمرین قبل در فایل activity_main.xml شی ProgressBar را چنین تغییر میدهیم

<ProgressBar

        android:id="@+id/prg1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        style="@android:style/Widget.ProgressBar.Horizontal" />

تنها مقدار style را برای تغییر ظاهر این شی اضافه کردیم حال در فایل MainActivity.java نیز خطوط پررنگ شده را اضافه میکنیم

package com.example.view2prj;



import android.os.Bundle;

import android.app.Activity;

import android.os.Handler;

import android.view.View;

import android.widget.ProgressBar;



public class MainActivity extends Activity {



        static int progress;

        ProgressBar progressBar;

        int progressStatus = 0;

        Handler handler= new Handler();



        @Override

        protected void onCreate(Bundle savedInstanceState) {

                 super.onCreate(savedInstanceState);

                 setContentView(R.layout.activity_main);



                 progress=0;

                 progressBar = (ProgressBar) findViewById(R.id.prg1);

              progressBar.setMax(200);



                 //--do some work in back ground--

                 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(View.GONE);

                                              }

                                                        });

                           }

                           //--do some long running work here--

                           private int doSomeWork()

                           {

                                    try{

                                              //--simulate doing some work--

                                              Thread.sleep(500);

                                              }catch (InterruptedException e){

                                                        e.printStackTrace();

                                              }

                                    return ++progress;

                           }

                 }).start();

        }



}

برنامه را اجرا کرده و نتیجه را مطابق تصویر زیر مشاده کنید و خواهید دید وقتی به 50درصد رسید محو میشود

آموزش کاربردی اندروید-قسمت بیست و هشتم

روش کار

برای نمایش ProgressBar در حالت عمودی نیز تنها کافی است در خصوصیت style از vertical استفاده کنیم

<ProgressBar

        android:id="@+id/prg1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        style="@android:style/Widget.ProgressBar.Vertical" />

علاوه بر این حالات میتوان از ثابت های زیر استفاده کرد و نتیجه گرفت:

  • ProgressBar.Horizoontal
  • ProgressBar.Vertical
  • ProgressBar.Large
  • ProgressBar.Inverse
  • ProgressBar.small.Inverse
  • ProgressBar.Large.Inverse

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

 //--update the progress bar--

                                      handler.post(new Runnable(){

                                              public void run()

                                              {

                                                      progressBar.setProgress(progressStatus);

                                              }

در این مثال محدوده 0تا 200 قابل درج است(به وسیله متد ()setMax حداکثر مقدرا را مشخص میکنیم)اما همانگونه که مشاهده کردید شی به محض اینکه به وسط کار برسد ناپدید میشود(در حالی که هنوز متد ()doSomeWork فراخوانی میگردد و progressStatus کمتر از صد است)برای اینکه مطمین شویم که ProgressBar تا انتها میرود و 100در صد تکمیل میشود مقدار حداکثر را برابر 100 قرار میدهیم ویا حلقه را به صورت زیر تا 200 تکرار میکنیم

  //--do some work here--

                              while(progressStatus < 100){

مدرس : خانم مهندس داودی نژاد

آموزش اندروید فصل سوم قسمت نهم

آموزش اندروید فصل سوم قسمت یازدهم

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *