در این آموزش نحوه استفاده از event-handling ها را در اندروید توضیح داده ایم.
Event Handling در اندروید
رخدادها روش های مناسبی برای گرداوری داده های، ارتباط کاربر با یکی از کامپوننت تعاملی نرم افزار هستند . مثال : فشردن یک دکمه و یا فشردن صفحه و مانند آن . فریم ورک اندروید یک صف رویداد را مانند first-in, first-out (FIFO) در خود نگه میدارد. شما میتوانید این رویداد ها را در نرم افزار خود دریافت و براساس آنها عکس العمل مناسبی ایجاد کنید..
در زیر لیستی از موضوعات مرتبط با مدیریت رخدادهای اندروید ذکر شده است.
- Event Listeners : یک Event Listeners یک رابط در کلاس view است، که دارای یک متد فراخوانی میباشد. این متدها با فریم ورک اندروید زمانی فراخوانی میشوند ، که رخداد به وقوع بپیوندد . تا شنونده رخداد ایجاد شود و ارتباط بین کاربر با عملکرد کاربر را در ظاهر نرم افزار حفظ کند. یعنی وقتی کاربر کاری انجام میدهد نرم افزار واکنش نشان دهد.
- Event Listeners Registration : Event Registration پردازشی است که توسط یک Event Handler که خود توسط یک Event Listener ایجاد شده انجام میشود . بنابراین آن handler هنگامیکه Event Listener رخدادی را آغاز می کند، فراخوانی میشود. یعنی هنگامیکه کاربر کاری انجام میدهد یک پردازشگر ثبت رخداد، شنونده آن رخداد را ثبت و میتواند نسبت به آن عکس العمل نشان دهد.
Event Handlers :
وقتی که یک رویداد رخ میدهد و ما یک event listener برای رخداد ثبت می کنیم ، event listener فراخوانی Event Handlers را به عهده می گیرد. اینکار متدی برای مدیریت یک رخداد است.
Event Listeners & Event Handlers:
مدیریت کنندگان رویداد
|
شنوندگان رویداد و توضیحات
|
onClick()
|
OnClickListener()
این متد زمانی که کاربران روی المانی کلیک و یا المانی را میفشارند و یا حتی روی یک المان مانند دکمه ،متن، عکس و غیره فوکوس می کنند فراخوانی میشود .
شما از متد onClick() برای مدیریت کردن رخداد های مانند این استفاده می کنید.
|
onLongClick()
|
OnLongClickListener() :
این متد زمانی فراخوانی میشود که کاربر یا روی آیتمی کلیک و یا آیتمی برای مدت یک یا چند ثانیه را لمس می کند و یا روی ایتمی مانند دکمه، متن، عکس و غیره فکوس می کند. شما از متد onLongClick() برای مدیریت این رخداد ها استفاده میکنید.
|
onFocusChange()
|
OnFocusChangeListener()
این متد زمانی فراخوانی میشود که یکی از عناصر فکوس خود را از دست میدهد. کاربر از روی آن عنصر به سایر قسمت های صفحه میرود شما از رخداد onFocusChange() برای چنین رخداد های استفاده می کنید.
|
onKey()
|
OnFocusChangeListener()
این متد زمانی فراخوانی میشود که کاربر روی آیتمی فکوس کرده و دکمه ای را فشرده و یا رها میکند .
شما از متد onKey() برای مدیریت کردن چنین رخداد های استفاده می کنید.
|
onTouch()
|
OnTouchListener()
این متد زمانی فراخوانی میشود که کاربر کلیدی را میفشارد و یا کلیدی را رها می کند و یا هر حرکتی روی صحفه دستگاه انجام دهد.
شما از رخداد onTouch() برای چنین رخداد های استفاده خواهید کرد.
|
onMenuItemClick()
|
OnMenuItemClickListener()
این متد وقتی فراخوانی میشود که کاربران یکی از آیتم های منو را انتخاب می کنند .
شما از متد onMenuItemClick() برای مدیریت چنین رخداد های استفاده می کنید.
|
onCreateContextMenu()
|
onCreateContextMenuItemListener()
این متد هنگامی فراخوانی میشود که منوی راست کلیک ایجاد میشود این منو در دستگاه ها با کلیک طولانی ایجاد خواهد شد.
|
تعداد بسیار بیشتری event listeners بصورت بخشی از کلاس View وجود دارند . مانند OnHoverListener, OnDragListener و غیره ، این رخداد ها ممکن است در نرم افزار شما مورد نیاز باشند. سایت اندروید تمامی این رخداد ها را توضیح داده است.
ایجاد Event Listeners
ثبت یک رخداد زمانی انجام میشود که یک Event Handler با یک Event Listener ایجاد شود. به این ترتیب یک متد مدیریت رخداد ایجاد میشود و این اتفاق زمانی رخ میدهد، که یک Event Listener رخداد را به انجام رسانده باشد. چندین روش برای اینکار وجود دارد. ما در اینجا به سه راه اصلی که برای موقعیت های پایه به کار میروند می پردازیم.
- استفاده از یک کلاس Anonymous Inner
- پیاده سازی کلاس Activity روی رخداد موجود
· استفاده از فایل طرح بندی activity_main.xml برای تعریف پوشه مدیریت رخداد
در قسمت ها زیر مثال های برای درک بهتر این مفاهیم ایجاد شده است.
Touch Mode (حالت لمسی):
کاربران با کمک کلید ها و دکمه ها و یا لمس صفحه میتوانند با نرم دستگاه خود ارتباط برقرار کنند.لمس صفحه دستگاه را به حالت touch mode وصل می کند. کاربران میتوانند با سخت افزار با فشردن تصویر دکمه و سایر کنترل ها ارتباط برقرار کنند. برای چک کردن اینکه دستگاه در حالت Touch Mode است میتوانید از متد InTouchMode() در کلاس View استفاده کنید.
فکوس Focus :
یک نما یا یک ابزار در حالت فکوس روشن شده و یا چشمک میزند ، این به این معنی است که این ابزار آماده دریافت دستور کاربر است.
isFocusable(): این متغییر مقدار درست و یا غلط را باز میگرداند.
isFocusableInTouchMode(): این حالت کنترل می کند که آیا کنترلر در حالت لمسی هم قبل فکوس است یا خیر گاهی اوقالت ابزار تنها در صورت فعال بودن صفحه کلید قابل فکوس شدن است.
android:foucsUp="@=id/button_l"
onTouchEvent() :
public boolean onTouchEvent(motionEvent event){
switch(event.getAction()){
case TOUCH_DOWN:
Toast.makeText(this,"you have clicked down Touch button",Toast.LENTH_LONG).show();
break();
case TOUCH_UP:
Toast.makeText(this,"you have clicked up touch button",Toast.LENTH_LONG).show();
break;
case TOUCH_MOVE:
Toast.makeText(this,"you have clicked move touch button"Toast.LENTH_LONG).show();
break;
}
return super.onTouchEvent(event) ;
}
مثال های Event Handling :
Event Listeners Registration Using an Anonymous Inner Class:
تعریف یک Event Listeners با استفاده از یک Anonymous Inner Class :
تعریف یک listener را بصورت ناشناس برای هر کلاس تنها به یک کنترل ارائه شده و شما امکان افزودن آروگومان به مدیریت رخداد را داشته باشد، کارایی دارد. با این رویکرد متد event handler میتواند به داده های private یا خصوصی Activity دسترسی داشته باشد و برای اینکار نیازی به اینکه از قبل Activity را فراخوانی کند ندارد.
اما اگر شما handler را به بیش از یک کنترل اعمال کرده باشید ، شما باید کد را cut و paste کنید. اگر کد handler طولانی باشد ، حفظ کردن کد کار سخت تری خواهد بود.
ما در مثال زیر به شما نحوه استفاده از کلاس های Listener جدا، برای ثبت و دریافت رخداد کلیک را در چند گام کوتاه و ساده را نشان داده ایم . شما میتوانید به همین سادگی listener را برای هر رخدادی بکار بگیرید.
گام
|
توضیحات
|
1
|
شما از نرم افزار اندروید استودیو برای ایجاد نرم افزار اندرویدی خود به نام myapplication در زیر شاخه پکیج com.example.myapplication درست مانند پروژه سلام دنیا در اندروید که توضیح داده شد است استفاده می کنید.
|
2
|
فایل src/MainActivity.java را ویرایش کنید تا بتوانید listeners رخداد کلیک و handlers دو دکمه را ایجاد کنید.
|
3
|
محتوای پیشفرض فایل res/layout/activity_main.xml را برای اینکه دارای کنترلهای رابط کاربری باشد تغییر دهید.
|
4
|
نیازی به تعریف رشته پیشفرض constants.Android نیست.
|
5
|
نرم افزار را اجرا کنید تا شبیه ساز پس از تائید تغییرات، نتیجه را به شما نشان دهد.
|
کد های زیر کد های ویرایش شده فایل src/com.example.myapplication/MainActivity.java میابشند این کد ها دارای ساختار متد چرخه حیات نرم افزار می باشند.
package com.example.myapplication;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
private ProgressDialog progress;
Button b1,b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progress = new ProgressDialog(this);
b1=(Button)findViewById(R.id.button);
b2=(Button)findViewById(R.id.button2);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView txtView = (TextView) findViewById(R.id.textView);
txtView.setTextSize(25);
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView txtView = (TextView) findViewById(R.id.textView);
txtView.setTextSize(55);
}
});
}
}
کدهای زیر محتوای فایل res/layout/activity_main.xml میباشند
در کد های زیر متغیر abc داری لوگوی سایت اصلی این آموزش می باشد شما میتوانید لوگوی خود و یا شرکت مد نظر را اضافه کنید:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Event Handling "
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point "
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small font"
android:id="@+id/button"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Font"
android:id="@+id/button2"
android:layout_below="@+id/button"
android:layout_alignRight="@+id/button"
android:layout_alignEnd="@+id/button" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/textView"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true"
android:textSize="25dp" />
</RelativeLayout>
کدهای زیر کدهای ویرایش شده فایل res/values/strings.xml میباشند که دو ثابت جدید را تعریف می کنند.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">myapplication</string>
</resources>
کد های زیر کدهای پیشفرض فایل AndroidManifest.xml میباشد:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.myapplication.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
با فرض اینکه شما هنگام نصب اندروید استودیو نرم افزار شبیه ساز را نصب کرده اید. نرم افزار myapplication را اجرا می کنیم. برای اینکار کافیست که یکی از اکتیویتی های نرم افزار را باز کرده و از نوار آپشن روی ایکون Run کلیک کنید. اندروید استودیو، نرم افزار شما را روی شبیه ساز نصب کرده و اگر همه چیز خوب پیشرفت در شبیه ساز پنجره زیر ظاهر می شود.
روی دکمه ها یکی بعد از دیگری کلیک کنید ، با اینکار خواهید دید که فونت نوشته Hello World تغییر خواهد کرد.
برای اینکار ما یک متد click event handler با هربار کلیک فراخوانی میشود.
تمرین:
پیشنهاد می کنم که event handler های مختلفی برای رخداد های مختلف ایجاد کرده تا مطمئن شوید که این مبحث را بدرستی درک کرده اید.
براي بهره مندي از مشاوره تخصصي در زمینه برنامه نویسی اندروید با شرکت سارگون تماس بگيريد