آموزش اندروید استودیوآموزش های برنامه نویسی اندروید
آموزش برنامه نویسی اندروید با اندروید استودیو (بخش سی و هفتم: کار با SeekBar در اندروید)
حتما تا به حال به SeekBar برخورده اید. سیک بار در واقع به ما امکان انتخاب بین مقدار صفر و حداکثر مقدار خودش را می دهد. که این کار به جای عدد، با استفاده از گرافیک انجام می شود و باعث ساده تر شدن کار و در نتیجه کاربری آسان تر می شود.
Seekbar کاربرد های مختلفی از جمله تغییر اندازه بلندی صدا، تغییر تغییر سایز فونت، تغییر اندازه تصویر، تغییر قیمت و … را به ما می دهد که به واسطه گرافیکی بودن آن، برنامه ما می تواند کاربری دلچسب تری را داشته باشد.
کد تکست ویو و سیک بار
<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); } } } ); } }
ممنون بابت آموزس خوبتون .حالا اگه من بخوام سایز من تکست ویو های برنامم تغییر کنه باید چکار کنم???
خواهش میکنم. برای تغییر سایز 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 قرار دهید.
سلام من تمام کد ها رو بدون ایراد میزنم قبول میکنه ولی قسمت fontSize= progress رو از progress ایراد میگیره
سلام، progress یک عدد (int) هست که در متد onProgressChanged به صورت آرگومان وارد شده.
(public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser
این که fontSize=progress رو ایراد میگیره یعنی fontSize=12 هم باید ایراد بگیره؟ تست کنید.
با توجه به این که fontSize خودش از نوع int تعریف شده، پس می تونه int رو بپذیره. و از اونجایی که progress هم int هست، اون رو هم می پذیره
اگه بخوایم صدا کا برنامه رو کم و زیاد کنیم چی؟
صدای کل برنامه
تو برنامه یه موزیک گذاشتم که از اول برنامه پلی میشه.
سلام متاسفانه برنامه نویسمون دیگه نیستند
سلام آگه بخواییم بعد اینکه فونت رو تعقییر دادیم ثابت بونه چکار کنیم چون از برنامه بیرون میاییم دوباره بر میگردی به حالت اولش
سلام متاسفانه بخش برنامه نویسی سایت فعلا تعطیل و برنامه نویس ما نیستند شرمنده
سلام وقت بخیر
ببخشید اگر بخواهیم سیکبار با عنوان باشه و از راست به چپ باشه باید چه کاری انجام بشه ؟