آموزش برنامه نویسی اندروید با اندروید استودیو (بخش سی و هفتم: کار با SeekBar در اندروید)

استاندارد

حتما تا به حال به SeekBar برخورده اید. سیک بار در واقع به ما امکان انتخاب بین مقدار صفر و حداکثر مقدار خودش را می دهد. که این کار به جای عدد، با استفاده از گرافیک انجام می شود و باعث ساده تر شدن کار و در نتیجه کاربری آسان تر می شود.

Seekbar کاربرد های مختلفی از جمله تغییر اندازه بلندی صدا، تغییر تغییر سایز فونت، تغییر اندازه تصویر، تغییر قیمت و … را به ما می دهد که به واسطه گرافیکی بودن آن، برنامه ما می تواند کاربری دلچسب تری را داشته باشد.

من یک پروژه به نام Seekbar-Gsm ایجاد می کنم.

سپس در قسمت activity_main.xml به سراغ Paletteها یا همان جعبه ابزار می روم.

یک Seekbar و یک TextView از قسمت Widgetها به لایه اپلیکیشن می کشم.

کد تکست ویو و سیک بار

<TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="188dp"
        android:id="@+id/textView" />

<SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="111dp"
        android:id="@+id/seekBar"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true" />

دلیل این که یک TextView نیز به لایه اپلیکیشن در اندروید استودیو اضافه کردم اینست که می خواهم با استفاده از سیک بار، اندازه فونتی که در TextView مشاهده می کنید، تغییر کند.

اما چگونه؟ برای پاسخ باید به قسمت جاوای اپلیکیشن اندرویدیمان برویم تا بقیه کار را انجام دهیم.

در مرحله اول در داخل تابع ()onCreate ، سیک بار و تکست ویو را با استفاده از دستور final تعریف می کنیم.

final TextView TheText=(TextView) findViewById(R.id.textView);

final SeekBar TheSeekbar=(SeekBar) findViewById(R.id.seekBar);

نکته اضافی :

کتابخانه لازم برای Seekbar، با استفاده از دستور زیر Import می شود.

import android.widget.SeekBar;

به یاد دارید که برای دکمه (Button) ها یک رویداد Listener معرفی می کردیم تا در هنگامی که بر روی دکمه میزنیم، رفتاری که می خواهیم را از خود نشان دهد. در اینجا نیز باید یک رویداد Listener برای سیک بار معرفی کنیم تا در هنگامی که مقدار آن را تغییر می دهیم فونت تکست ویو ما تغییر کند.

بدین منظور از رویداد SeekBarChangeListener، استفاده می کنیم.

TheSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

//کد ما
    }

اگر کد بالا را تعریف کنیم، مشاهده می کنید که توسط اندروید استودیو، خطایی گرفته شده است.

 

بر روی چراغ قرمز رنگی که علامت تعجب بر روی آنست کلیک می کنیم تا علت خطا را جویا شویم.

 

مشاهده می کنید که برای رفع خطا، سه تابع برای ما پیشنهاد داده است. این متدها در داخل تابع Listener سیک بار ما ایجاد می شوند.

onStartTrackingTouch یک رویداد شروع برای لمس سیک بار است.

onStopTrackingTouch یک رویداد توقف برای لمس سیک بار است.

onProgressChanged نیز یک رویداد برای زمانی که نوار سیک بار را تغییر می دهیم است.

هر کدام از متدهای بالا، برای خودشان کدهایی می توانند داشته باشند که در ادامه با تعریف کدهای مربوطه، با عملکرد توابع بالا آشنا خواهید شد.

بر روی Ok کلیک می کنیم تا متدهای بالا برای ما ایجاد شود.

 

 

سه متد تابع setOnSeekBarChangeListener

TheSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        }

        );

ابتدا در داخل تابع setOnSeekBarChangeListener یک متغیر عددی برای سایز فونت معرفی می کنیم.

int fontSize=0;

در داخل متد onProgressChanged ، مقدار fontsize از Progress نوار سیک بار خوانده می شود. Progress نوار سیک بار ما، مقداری را به صورت int از نوار سیک بار میگیرد. در خط اول به برنامه می گوییم که مقدار نوار سیک بار را به داخل متغیر fontsize بریزد.

دستور دوم کاملا اختیاری بوده و یک توست است که برای نمایش سایز فونت در هنگامی که سیک بار را تغییر می دهیم می باشد.

با استفاده از دستور سوم کد زیر، به تکست ویو ما ست می شود.

fontSize=progress;

Toast.makeText(MainActivity.this, "سایز فونت: " +fontSize , Toast.LENGTH_LONG).show();

TheText.setTextSize(fontSize);

در ادامه باید در داخل متد onStopTrackingTouch که متد توقف ما بود،  یک شرط به سیک بار اضافه کنیم. این شرط به برنامه می گوید اگر مقدار int کوچکتر از 30 بود عملکرد ها و یا همان کد هایی که ما ازش میخواهیم را برای ما انجام بدهد.

این کدها، می تواند هر دستوری باشند. مثلا یک توست (Toast).

در این جا ما داخل شرط گفتیم که فونت سایز رو 30 قرار بده و هنگامی که سیک بار درحال حرکت هست مقدار اون رو با فونت سایز هماهنگ کن.

if(fontSize<30)
                {
                    fontSize=30;

                    TheSeekbar.setProgress(fontSize);
                }

کد کامل جاوا MainActivity

package com.gsm_developers.seekbar_gsm;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

        final TextView TheText=(TextView) findViewById(R.id.textView);

        final SeekBar TheSeekbar=(SeekBar) findViewById(R.id.seekBar);

        TheSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            int fontSize=0;

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                fontSize=progress;

                Toast.makeText(MainActivity.this, "سایز فونت: " +fontSize , Toast.LENGTH_LONG).show();

                TheText.setTextSize(fontSize);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

                if(fontSize<30)
                {
                    fontSize=30;

                    TheSeekbar.setProgress(fontSize);
                }
            }
        }

        );
    }
}

حال برنامه را اجرا می کنیم و مقدار نوار سیک بار را تغییر می دهیم. مشاهده می کنید که با پیغام Toast ، سایز فونت انتخابی ما نمایش داده می شود و سپس با استفاده از نوار سیک بار سایز فونت تکست ویو ما تغییر می کند.

البته اگر در سیک بار شما مشکل و ناهمگونی مقداری وجود داشت، به دلیل ناهمگونی ، پیشنهاد می شود دستور داخل متد onStopTrackingTouch که در اینجا بیشتر جنبه آموزشی داشت پاک شود. همچنین دستور Toast داخل متد onProgressChanged نیز ، به دلیل تاخیر چند ثانیه ای برای نمایش عدد فونت سایز، بهتر است که پاک شود.