تا الان برنامه های پیش نیاز توسعه اندروید را نصب کرده و اولین برنامه را نوشتیم و بعد از آن با ساختار یک پروژه در اندروید تا حدی آشنا شدیم. حالا وقت آن است که پروژه HelloWorld را کمی دستکاری کنیم و با چندین ویژگی اندروید آشنا شویم.
مطالب این فصل در عین این که مهم هستند ولی ساده تر از مطالب فصل های قبلی است. کمی استراحت و تفریح در میانه کار بد نیست! بیایید برای شروع یک دکمه به برنامه HelloWorld اضافه کنیم:
اضافه کردن یک دکمه به layout:
برای اضافه کردن یک دکمه به صفحه برنامه HelloWorld، ابتدا فایل activity_main را باز کنید. اگر کد XML فایل باز شده است به حالت طراحی گرافیکی بروید. اگر یادتان نیست به فصل قبل برگردید. Palette را در سمت چپ صفحه می بینید:
دکمه یا Button را که در عکس مشخص کرده ایم بگیرید و به صفحه طراحی بکشید و در وسط صفحه (مثل عکس زیر) رها کنید:
بعد از رها کردن دکمه، در مرکز صفحه، می خواهیم متن نمایش داده شده بر روی دکمه را تغییر دهیم. برای این کار به پنجره properties که در سمت راست صفحه می بینید می رویم و در جایی که با فلش مشخص شده است، کلمه «سلام» را وارد می کنیم:
بعد از تغییر دادن متن Enter کنید تا تغییر داده شده در Button در پیش نمایش صفحه اعمال شود:
نمایش پیغام به کاربر با کلیک بر روی دکمه:
حالا که یک دکمه به صفحه چیدمان برنامه اضافه کرده ایم، حتماً می خواهیم که با کلیک کردن بر روی آن یک کار خاصی اتفاق بیافتد. چطور است یک پسغام به کاربر نشان بدهیم؟ دوباره به پنجره properties برگردید و در برابر ویژگی onClick بنویسید: buttonOnClick. مثل عکس زیر:
buttonOnClick اسم متدی است که هر گاه روی این دکمه کلیک شد، فراخوانی خواهد شد. حالا کلاس MainActivity را باز کنید. باید این تابع را به این کلاس اضافه کنیم:
public void buttonOnClick(View v) { }
این بدنه متد است. قبل از این که ادامه بدهیم، همانطور که احتمالاً متوجه شده اید، زیر پارامتر View یک خط قرمز کشیده شده است. علت این است که کلاس View در این کلاس import نشده است. برای رفع این خطا باید این کلاس را import کنید. ساده ترین راه حل این است که روی این کلمه کلیک کنید و کلیدهای ترکیبی Ctrl+1 را بزنید تا مثل عکس زیر انواع راه حل های اکلیپس برای رفع این مشکل را به شما نشان دهد:
از بین راه حل های موجود، اولی که Import ‘View’ است را انتخاب کنید و Enter بزنید.
نکته: متدی که برای On Click می سازید حتماً باید public باشد، نوع آن باید حتماً void باشد و حتماً باید یک پارامتر از نوع View داشته باشد.
حالا وقت آن است که کدی که می خواهیم با کلیک کردن بر روی دکمه اجرا شود را به متد buttonOnClick اضافه کنیم:
public void buttonOnClick(View v) { Toast.makeText(this, "سلام دنیا!", Toast.LENGTH_LONG).show(); }
نکته ۱: کلاس Toast را هم باید import کنید. حالا می دانید چطور باید این کار را انجام دهید!
نکته ۲: Toast ها متن های کوچک و تیره رنگی هستند که در پایین صفحه نمایش داده می شوند و بعد از چند لحظه ناپدید می شوند. احتمالاً بارها و بارها آن ها را دیده اید.
حالا وقت آن رسیده است که برنامه را اجرا کنیم و نتیجه تغییراتی که داده ایم را ببینیم:
خوشامدگویی به کاربر:
جالا بیایید برنامه را کمی پیچیده تر کنیم و از کاربر بخواهیم نام خود را وارد کند تا برنامه به او خوش آمد بگوید. برای این کار باید ابتدا یک EditText به layout صفحه اضافه کنیم. برای این کار layout را باز کنید و وارد بخش طراحی گرافیکی شوید. از آکاردئون پالت، قسمت Text Editors را باز کنید:
حالا از میان گزینه های موجود، Person Name را بگیرید و به layout اضافه کنید:
حالا در حالی که این EditText را انتخاب کرده اید، به پنجره properties بروید و اولین ویژگی این EditText که Id آن است را به شکل زیر تغییر دهید:
حالا باید دوباره به سراغ کد برویم. MainActivity را باز کنید و کارهای زیر را به ترتیب انجام دهید:
۱- یک property از نوع EditText به کلاس اضافه کنید:
EditText personNameEditText;
کلاس EditText را هم باید import کنید.
۲- کد زیر را به انتهای متد onCreate اضافه کنید:
personNameEditText = (EditText) findViewById(R.id.personNameEditText);
۳- متد buttonOnClick را به شکل زیر تغییر دهید:
public void buttonOnClick(View v) { String personName = personNameEditText.getText().toString(); Toast.makeText(this, "سلام" + " " + personName, Toast.LENGTH_LONG).show(); }
پس از انجام این تغییرات کلاس MainActivity به شکل زیر خواهد بود (چیزهایی که تغییر نکرده اند را نیاورده ایم):
public class MainActivity extends Activity { EditText personNameEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); personNameEditText = (EditText) findViewById(R.id.personNameEditText); } public void buttonOnClick(View v) { String personName = personNameEditText.getText().toString(); Toast.makeText(this, "سلام" + " " + personName, Toast.LENGTH_LONG).show(); } // ... }
۴- برنامه را اجرا کنید! وقتی که برنامه در شبیه ساز اجرا شد، همانطور که در عکس می بینید، نام خود را وارد کنید و سپس دکمه را کلیک کنید…
برنامه اولیه را کمی تغییر دادیم و چیزهای جدیدی یاد گرفتیم! سخت بود؟ چیزهایی است که نمی دانید چه اند؟ چرا خیلی کارها را انجام دادیم؟ عجله نکنید! در ادامه این راه با ما باشید و نظرات خود را به ما بگویید!
سلام ببخشید برای اضافه کردن دکمه هر کاری که گفتید کردم ولی باز علامت تعجب روش مونده و این اخظار رو میده
[I18N] Hardcoded string “سلام”, should use @string resource
.و یه مشکل دیگه اینکه سلام من برعکس نوشته میشه
سلام محمد
اندروید برای اینکه بتونه زبانهای مختلف رو پشتیبانی کنه میگه بهتره رشتههای متنی رو به جای این که مستقیماً تو کد یا xml بزارید، بهتره اونا رو تو فایل strings.xml که در پوشه values قرار داره تعریف کنید و کلید اونها رو استفاده کنید. مثلاً به جای این که مستقیماً بنویسید:
android:text=”سلام”
برید تو فایل strings.xml این عبارت رو اضافه کنید:
سلام
حالا به راحتی میتونید بدون این که برنامه رو تغییر بدید زبانهای دیگه رو برنامه اضافه کنید.
به هر حال این یک خطا نیست و فقط یک توصیه است. میتوانید کاملاً آن را نادیده بگیرید.
با سلام
وقتی on click رو با عبارت buttonOnClick مقدار دهی می کنم، هیچ کدی در کلاس جاوا ایجاد نمیشه فقط به تگ button یک عبارت android:onClick=”buttonOnClick اضافه میشه؟
سلام
بعد از اضافه کردن این تگ به XML باید تابع زیر را در Activity اضافه کنید:
public void buttonOnClick(View v) {
//…
}
سلام . خیلی عالیه آموزشاتون . فقط حتما اشاره بفرمایید که بعد از ایجاد هر تغییر یک CTRL+S بزنن که تغییرات ذخیره بشه . این مساله خیلی کار دستم داده تا حالا . گاهی اوقات کدم درست بوده ولی به علت همین که ذخیره نشده . به مشکل خوردم .
سلام خسته نباشین. میخواستم بگم آخه تو این آموزش ها آدم متوجه نمیشه که آخه عمیقا مثلا فلان کد چجوری کار میکنه اصلا چجوری کار میکنه. تا آخرش اینجوریه؟ مثلا منی که آندروید رو از صفر میخوام شروع کنم متوجه نمیشم آخه.
سلام
استاد چرا به صفحه تم من هیچ کدوم از edit text ها اضافه نمیشه و پایینش این ارور رو میده:
Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V
Exception details are logged in Window > Show View > Error Log
سلام
کد و لاگ ارور را بنویسید تا ببینیم مشکل از کجاست
سلام
من یک برنامه اندر.یدی دارم که کتاب هست و در صفحه اول یک دکمه فهرست فصل ها رو داره که با کلیک روی آن میره به فصل ها و…
من میخواستم یک دکمه جدید هم بزارم کنارش که با کلیک به فصل های دیگه بره
یعنی هر دکمه شامل چند فصل بخصوص باشن.
چیکار کنم توی دیتابیس و کد نویسیش؟
ممنون
ممنونم ازت عالی بود روش OnClick
گل کاشتی عباداتت قبول حق