مترجم: حبیب الله علیخانی
منبع:راسخون
منبع:راسخون
اکنون زمان آن است که اولین اکتیویتی تان را ایجاد کنید. البته شما اولین اکتیویتی را زمانی که پروژه تان را از طریق ویزارد New Android Project ایجاد کرده بودید، ساخته اید. بنابراین شما نیازی نیست که در این پروژه اکتیویتی جدید ایجاد کنید. شما با فایل MainActivity.java در پروژه تان کار خواهید کرد. اکنون این فایل را باز کنید.
شما می توانید کد مقداردهی اولیه را درست زیر متد setContentView() بنویسید.
به خط زیر توحه کنید:
این خط کد برای اجرای اپلیکیشن نیاز است که کلاس Activity پایه را برای اجرای کار راه اندازی کلاس MainActivity را فراخوانی می کند. اگر شامل این یک خط کد نباشد، یک استثنا در زمان اجرا دریافت خواهید کرد. اطمینان حاصل کنید که همیشه این متد، متد onCreate() تان را فراخوانی کند.
یک bundle به شما توسعه دهنده، راهی برای پاس دادن اطلاعات به عقب و جلو بین صفحات(اکتیویتی های مختلف) در آنچه که به عنوان bundle شناخته شده می دهد. شما می توانید انواع مختلف را در یک bundle قرار دهید و آنها را روی اکتیویتی هدف دریافت کنید. در مطلب در بخش های آینده پوشش خواهیم داد.
برای دریافت UI برای نمایش در صفحه نمایش، باید برای اکتیویتی content view تنظیم کرد(از متد setContentView() استفاده می کنیم).
با کد زیر این کد انجام می شود:
R.layout.main فایل main.xml است که در دایرکتوری res/layouts قراردارد. این Layout است که در بخش های قبلی توضیح داده شد.
اپلیکیشن Silent Mode Toggle که در بخش های قبلی ساخته شده بود، تعامل زیادی با کاربر نداشت و درواقع خیلی کم است. کاربر دکمه را برای حالت سایلنت (بی صدا) می زند و سپس دوباره می تواند حالت سایلنت را خاموش کند.
برای پاسخ به این رویداد زدن به دکمه، نیاز به ثبت کردن دارید، آنچه که به عنوان شنونده ی رویداد(event listener) شناخته شده است. یک listener رویداد به یک رویداد در سیستم اندروید پاسخ می دهد. شما باید انواع رویدادها در سیستم اندروید را بشناسید، اما دوتا از پرکاربردترین آنها رویدادهای لمسی (مشابه رویداد کلیک) و رویدادهای کیبورد است.
این کد از متد findViewById() استفاده می کند، که در دسترس همه ی اکتیویتی های اندروید است. این متد اجازه می دهد تا هر view درون layout اکتیویتی است و با آن کار می کند را پیدا کند. این متد همیشه یک کلاس View را بر می گرداند که قبل از اینکه بتوانید با این متد کار کنید باید نوع مناسبی برای آن تعیین کنید(cast کنید). در کد زیر(که قطعه کدی از کد قبل است)، شما بازگشتی View از متد findViewById() را به یک Button، cast می کنید(که یک زیر کلاسی از View است).
Button toggleButton = (Button) findViewById(R.id.toggleButton);
بلافاصله بعد از این خط، اداره کننده ی رویداد را تنظیم می کنید.
کد اداره کننده ی رویداد بعد از بازیابی Button از layout در خط قرار گرفته است. راه اندازی اداره کننده ی رویداد به سادگی تنظیم یک new View.OnClickListener است. این شنونده ی click شامل یک متد Click() است که بعد از اینکه دکمه کلیک شده فراخوانی خواهد شد. اینجا جایی است که می خواهم کد اجرای toggle مد بی صدا را قرار دهم.
اگر نوع در فایل layout با آنچه که شما به آن cast می کنید، فرق داشته باشد(شما یک imageview در فایل layout داشته باشید و سعی کنید که آن را به ImageButton ، Cast کنید)، یک خطای زمان اجرا دریافت خواهید کرد. بنابراین مطمئن باشید که به یک نوع مناسب cast کنید.
هنگامیکه شما این کد را در ویرایشگر خود تایپ می کنید، ممکن است برخی خطوط موج دار قرمز دیده شود. مانند تصویر زیر:
این خطوط یعنی ایکلیپس به شما می گوید که "من این چیز (Button) را نمی شناسم". اگر مکان نما را روی این خطوط موج دار قرار دهید و برای لحظه ای آن را ترک کنید، یک پنجره ی متن خواهید دید که به شما چندین پیشنهاد می دهد مانند تصویر بالا. در این حالت شما پیشنهاد اول که Import ‘Button’ است را انتخاب کنید. این کار دستور زیر را به بالای فایل اضافه می کند:
import android.widget.Button;
این دستور به ایکلیپس آگاهی می دهد که Button در پکیج اندروید قرار گرفته است. همچنین ممکن است نیاز باشد تا android.view.package را هم وارد کنید.
هنگامیکه شما اپلیکیشن تان را بیشتر توسعه می دهید، ویجت های دیگری را به عنوان بخشی از اپلیکیشن تان قرار می دهید و توجه داشته باشید که باید چند import دیگر را اضافه کنید تا پروژه تان کامپایل شود. در حالیکه این مسئله ی بزرگی نیست و شما می توانید یک متد مختصر نویسی که شامل همه چیز در یک پکیج خاص تهیه کنید و می توانید این کار را با قرار دادن یک ستاره در پایان نام بسته انجام دهید. مانند زیر:
import android.widget.*;
این دستور به ایکلیپس اطلاع می دهد که شامل همه ی ویجت های درون بسته ی android.widget است.
این کد در ابتدا سنگین است و برای یادگیر سخت است. در این نقطه، بهترین کاری که می توانید انجام دهید کد دکمه ی جدید را در یک متدی که شما نی توانید آن را در متد onCreate() فراخوانی کنید، استخراج کنید . برای انجام این کار، نیاز دارید تا یک متد void از نوع private به نام setButtonClickListener() را ایجاد کنید که شامل کد دکمه است. این متد جدید در متد onCreate() فراخوانی می شود. این کد در زیر نشان داده شده است.
21 : در این خط متد جدید پیاده سازی می شود.
اکنون زمان آن است که به رویداد کلیک از طریق کد متد onClick() برای دکمه تان پاسخ دهید.
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع است.
شروع با onCreate()
همان طور که در گذشته گفته شد، نقطه ی ورود به اپلیکیشن شما متد onCreate() است. کد برای فایل MainActivity.java شما شامل یک implement متد onCreate() است. اینجا جایی است که شما قصد دارید برخی کد را بنویسید. در حال حاضر، کد شما باید مثل زیر باشد:به خط زیر توحه کنید:
اجرای bundle:
در قطعه کد فوق، موارد زیر را توجه کنید:نمایش UI
به طور پیشفرض، یک اکتیویتی UI مشخصی ندارد. این UI می تواند فرم ساده ای باشد که به کاربر اجازه ی تایپ اطلاعات را دهد تا ذخیره شود، همچنین این UI می تواند یک اپلیکیشن با ماهیت مجازی تقویت شده مبتنی بر دوربین(مانند Layar در اندروید مارکر) باشد، یا می تواند یک UI مبتنی بر drawn-on-the-fly باشد مانند بازی های دوبعدی یا سه بعدی. به عنوان یک توسعه دهنده، این کار شما است که به اکتیویتی بگوییدکدام Layout اکتیویتی باید لود شود.برای دریافت UI برای نمایش در صفحه نمایش، باید برای اکتیویتی content view تنظیم کرد(از متد setContentView() استفاده می کنیم).
با کد زیر این کد انجام می شود:
اپلیکیشن Silent Mode Toggle که در بخش های قبلی ساخته شده بود، تعامل زیادی با کاربر نداشت و درواقع خیلی کم است. کاربر دکمه را برای حالت سایلنت (بی صدا) می زند و سپس دوباره می تواند حالت سایلنت را خاموش کند.
برای پاسخ به این رویداد زدن به دکمه، نیاز به ثبت کردن دارید، آنچه که به عنوان شنونده ی رویداد(event listener) شناخته شده است. یک listener رویداد به یک رویداد در سیستم اندروید پاسخ می دهد. شما باید انواع رویدادها در سیستم اندروید را بشناسید، اما دوتا از پرکاربردترین آنها رویدادهای لمسی (مشابه رویداد کلیک) و رویدادهای کیبورد است.
رویدادهای کیبورد
رویداد کیبورد زمانیکه یک کلید خاصی از کیبورد فشرده می شود، رخ می دهد. به عنوان مثال می خواهید یک کلید میانبر برای اپلیکیشن خود اتخاذ کنید. اگر کابر کلید های Alt + E را فشار دهد، به منوی Edit رود. پاسخگویی به رویدادهای کیبورد به شما اجازه ی انجام این کار را می دهد. در این سری آموزش ما نمی خواهیم از رویدادهای کیبورد استفاده کنیم، اما اگر در اپلیکیشن های آینده به آن نیاز پیدا کردید، باید متد onKeyDown() را override کنیم، مانند زیر:رویدادهای لمسی(Touch)
رویداد های لمسی زمانی که شما یک ویجت را بر روی صفحه نمایش ضربه می زنید(رویداد tap)، رخ می دهد. پلت فرم آندروید هر رویداد tap را به عنوان یک رویداد کلیک می شناسد. از اینجا به بعد، کلمه های ضربه(tap)، کلیک(click) ، و لمس(touch) مترادف هستند. نمونه هایی از ویجت که می تواند به رویداد touch پاسخ دهد، شامل (اما فقط به اینها محدود نمی شود):
1- Button
2- ImageButton
3- EditText
4- Spinner
5- List Item Row
6- Menu Item
نوشتن اولین اداره کننده ی رویداد(event handler)
برای پاسخگویی به رویداد کلیک toggle مد بی صدا(SM) برای اپلیکیشن شما، لازم است که رویداد کلیک که توسط یک دکمه در معرض فشار دادن قرار گرفت را پاسخ دهید.وارد کردن کد
کدهای زیر را در ادیتور وارد کنید:
1- package net.rasekhoon;
2-
3- import android.app.Activity;
4- import android.os.Bundle;
5- import android.view.View;
6- import android.widget.Button;
7-
8-
9- public class MainActivity extends Activity {
10-
11- /** Called when the activity is first created. */
12- @Override
13- public void onCreate(Bundle savedInstanceState) {
14- super.onCreate(savedInstanceState);
15- setContentView(R.layout.main);
16- Button toggleButton = (Button) findViewById(R.id.toggleButton);
17- toggleButton.setOnClickListener(new View.OnClickListener() {
18-
19- @Override
20- public void onClick(View v) {}
21- });
22- }
23- }
برای این پروژه یک toggleButton در متد main.xml وارد کنید و به مشخصه ی id آن مقدار toggleButton دهید(خط 13):2-
3- import android.app.Activity;
4- import android.os.Bundle;
5- import android.view.View;
6- import android.widget.Button;
7-
8-
9- public class MainActivity extends Activity {
10-
11- /** Called when the activity is first created. */
12- @Override
13- public void onCreate(Bundle savedInstanceState) {
14- super.onCreate(savedInstanceState);
15- setContentView(R.layout.main);
16- Button toggleButton = (Button) findViewById(R.id.toggleButton);
17- toggleButton.setOnClickListener(new View.OnClickListener() {
18-
19- @Override
20- public void onClick(View v) {}
21- });
22- }
23- }
1- <?xml version="1.0" encoding="utf-8"?>
2- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3- android:layout_width="fill_parent"
4- android:layout_height="fill_parent"
5- android:orientation="vertical" >
6-
7- <TextView
8- android:layout_width="fill_parent"
9- android:layout_height="wrap_content"
10- android:text="@string/hello" />
11-
12- <ToggleButton
13- android:id="@+id/toggleButton"
14- android:layout_width="wrap_content"
15- android:layout_height="wrap_content"
16- android:text="ToggleButton" />
17-
18- </LinearLayout>
2- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3- android:layout_width="fill_parent"
4- android:layout_height="fill_parent"
5- android:orientation="vertical" >
6-
7- <TextView
8- android:layout_width="fill_parent"
9- android:layout_height="wrap_content"
10- android:text="@string/hello" />
11-
12- <ToggleButton
13- android:id="@+id/toggleButton"
14- android:layout_width="wrap_content"
15- android:layout_height="wrap_content"
16- android:text="ToggleButton" />
17-
18- </LinearLayout>
Button toggleButton = (Button) findViewById(R.id.toggleButton);
بلافاصله بعد از این خط، اداره کننده ی رویداد را تنظیم می کنید.
کد اداره کننده ی رویداد بعد از بازیابی Button از layout در خط قرار گرفته است. راه اندازی اداره کننده ی رویداد به سادگی تنظیم یک new View.OnClickListener است. این شنونده ی click شامل یک متد Click() است که بعد از اینکه دکمه کلیک شده فراخوانی خواهد شد. اینجا جایی است که می خواهم کد اجرای toggle مد بی صدا را قرار دهم.
اگر نوع در فایل layout با آنچه که شما به آن cast می کنید، فرق داشته باشد(شما یک imageview در فایل layout داشته باشید و سعی کنید که آن را به ImageButton ، Cast کنید)، یک خطای زمان اجرا دریافت خواهید کرد. بنابراین مطمئن باشید که به یک نوع مناسب cast کنید.
هنگامیکه شما این کد را در ویرایشگر خود تایپ می کنید، ممکن است برخی خطوط موج دار قرمز دیده شود. مانند تصویر زیر:
import android.widget.Button;
این دستور به ایکلیپس آگاهی می دهد که Button در پکیج اندروید قرار گرفته است. همچنین ممکن است نیاز باشد تا android.view.package را هم وارد کنید.
هنگامیکه شما اپلیکیشن تان را بیشتر توسعه می دهید، ویجت های دیگری را به عنوان بخشی از اپلیکیشن تان قرار می دهید و توجه داشته باشید که باید چند import دیگر را اضافه کنید تا پروژه تان کامپایل شود. در حالیکه این مسئله ی بزرگی نیست و شما می توانید یک متد مختصر نویسی که شامل همه چیز در یک پکیج خاص تهیه کنید و می توانید این کار را با قرار دادن یک ستاره در پایان نام بسته انجام دهید. مانند زیر:
import android.widget.*;
این دستور به ایکلیپس اطلاع می دهد که شامل همه ی ویجت های درون بسته ی android.widget است.
این کد در ابتدا سنگین است و برای یادگیر سخت است. در این نقطه، بهترین کاری که می توانید انجام دهید کد دکمه ی جدید را در یک متدی که شما نی توانید آن را در متد onCreate() فراخوانی کنید، استخراج کنید . برای انجام این کار، نیاز دارید تا یک متد void از نوع private به نام setButtonClickListener() را ایجاد کنید که شامل کد دکمه است. این متد جدید در متد onCreate() فراخوانی می شود. این کد در زیر نشان داده شده است.
1- package net.rasekhoon;
2-
3- import android.app.Activity;
4- import android.os.Bundle;
5- import android.view.View;
6- import android.widget.Button;
7-
8-
9- public class MainActivity extends Activity {
10-
11- /** Called when the activity is first created. */
12- @Override
13- public void onCreate(Bundle savedInstanceState) {
14- super.onCreate(savedInstanceState);
15- setContentView(R.layout.main);
16-
17- setButtonClickListener();
18- }
19-
20-
21- private void setButtonClickListener() {
22- Button toggleButton = (Button) findViewById(R.id.toggleButton);
23- toggleButton.setOnClickListener(new View.OnClickListener() {
24-
25- @Override
26- public void onClick(View v) {
27- // TODO Auto-generated method stub
28- }
29- });
30- }
31- }
17 : در این خط متدی فراخوانی می شود تا شنونده ی کلیک(clickListener) دکمه تنظیم شود.2-
3- import android.app.Activity;
4- import android.os.Bundle;
5- import android.view.View;
6- import android.widget.Button;
7-
8-
9- public class MainActivity extends Activity {
10-
11- /** Called when the activity is first created. */
12- @Override
13- public void onCreate(Bundle savedInstanceState) {
14- super.onCreate(savedInstanceState);
15- setContentView(R.layout.main);
16-
17- setButtonClickListener();
18- }
19-
20-
21- private void setButtonClickListener() {
22- Button toggleButton = (Button) findViewById(R.id.toggleButton);
23- toggleButton.setOnClickListener(new View.OnClickListener() {
24-
25- @Override
26- public void onClick(View v) {
27- // TODO Auto-generated method stub
28- }
29- });
30- }
31- }
21 : در این خط متد جدید پیاده سازی می شود.
اکنون زمان آن است که به رویداد کلیک از طریق کد متد onClick() برای دکمه تان پاسخ دهید.
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع است.
/ج