آموزش برنامه نویسی اندروید با اندروید استودیو (بخش سی و هفتم: کار با 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 نیز ، به دلیل تاخیر چند ثانیه ای برای نمایش عدد فونت سایز، بهتر است که پاک شود.

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

  1. امین

    ممنون بابت آموزس خوبتون .حالا اگه من بخوام سایز من تکست ویو های برنامم تغییر کنه باید چکار کنم???

    • Arash

      خواهش میکنم. برای تغییر سایز TextView به قسمت لایه اپلیکیشن مراجعه نمایید. سپس در قسمت Text از لایه اپلیکیشن که کدهای xml را مشاهده می کنید، مقدار android:layout_width و android:layout_height را تغییر دهید. این مقادیر می تواند به صورت عددی باشند مثلا :
      android:layout_width=”144pt”
      android:layout_height=”150px”
      مقدار واحدهای مجاز عبارت اند از :
      dp in mm pt px sp
      این کار سایز تکست ویو شما را به صورت استاتیک تغییر می دهد. ولی اگر می خواهید با نوار seekbar سایز تکست ویو شما تغییر کند، مقدار آن را برابر match_parent قرار دهید.

  2. ارمان

    سلام من تمام کد ها رو بدون ایراد میزنم قبول میکنه ولی قسمت fontSize= progress رو از progress ایراد میگیره

    • Arash

      سلام، progress یک عدد (int) هست که در متد onProgressChanged به صورت آرگومان وارد شده.
      (public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser
      این که fontSize=progress رو ایراد میگیره یعنی fontSize=12 هم باید ایراد بگیره؟ تست کنید.
      با توجه به این که fontSize خودش از نوع int تعریف شده، پس می تونه int رو بپذیره. و از اونجایی که progress هم int هست، اون رو هم می پذیره

  3. علی

    سلام آگه بخواییم بعد اینکه فونت رو تعقییر دادیم ثابت بونه چکار کنیم چون از برنامه بیرون میاییم دوباره بر میگردی به حالت اولش

    • mohsen

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

دیدگاهتان را بنویسید

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