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

4 سال پیش

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

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، مدیریت رویدادها در برنامه نویسی اندروید را بررسی می کنیم.

رویدادها یک روش مفید برای جمع آوری داده ها در مورد تعامل کاربر با مولفه های تعاملی برنامه ها است. مانند فشار دادن دکمه ها یا لمس صفحه و غیره. فریم ورک اندروید یک صف از رویداد را به عنوان اولین صف، در مرحله اول (FIFO) نگه می دارد. شما می توانید این رویداد ها را در برنامه خود ضبط کرده و مطابق با نیازها اقدام مناسب را انجام دهید.

سه مفهوم مربوط مدیریت رویدادها در برنامه نویسی اندروید وجود دارد:

  • Event Listeners –  رابطی در کلاس View است که شامل یک روش پاسخگویی منفرد است.
  • Event Listeners Registration-فرآیندی است که طی آن یک رویدادگیر در یک رویداد شنونده ثبت می شود تا هنگام گوش دادن به رویداد ، برنامه کنترل کننده فراخوانی شود.
  • Event Handlers  – هنگامی که یک رویداد اتفاق می افتد و ما یک شنونده رویداد را برای رویداد ثبت کرده ایم، شنونده رویداد Event Handlers را فرا می خواند، این روشی است که در واقع رویداد را اداره می کند.

لیست رویدادهای Event Listener و Event Handler

Event Handler Event Listener و توضیحات
()onClick ()OnClickListenerاین حالت وقتی فراخوانی می شود که کاربر هر ویجتی مانند دکمه ، متن ، تصویر و غیره را کلیک یا لمس کند. شما برای مدیریت چنین رویدادی از کنترل کننده رویداد ()onClick استفاده خواهید کرد.
()onLongClick ()OnLongClickListenerاین حالت وقتی فراخوانی می شود که کاربر برای یک یا چند ثانیه هر ویجت مانند دکمه، متن، تصویر و غیره را کلیک کند یا لمس کند. شما برای کنترل چنین رویدادی از کنترل کننده رویداد ()onLongClick  استفاده خواهید کرد.
()onFocusChange ()OnFocusChangeListenerاین حالت زمانی فراخوانی می شود که یک کنترل از حالت انتخاب (focus) خارج می شود. شما برای کنترل چنین رویدادی از کنترل کننده رویداد onFocus Change () استفاده خواهید کرد.
()onKey ()OnFocusChangeListenerاین حالت زمانی خوانده می شود که کاربر یک مورد یا آیتم را انتخاب کرده و کلید سخت افزاری دستگاه را فشار داده یا رها کند. شما برای اداره چنین رویدادی از کنترل کننده رویداد ()onKey استفاده خواهید کرد.
()onTouch ()OnTouchListenerاین متد زمانی فرخوانی می شود که وقتی کاربر کلید را فشار می دهد، کلید را رها می کند یا هر حرکتی روی صفحه نمایش انجام داده می شود. شما برای کنترل چنین رویدادی از کنترل کننده رویداد () onTouch استفاده خواهید کرد.
()onMenuItemClick ()OnMenuItemClickListenerوقتی کاربر یکی از آیتم های منو را انتخاب می کند، این حالت فراخوانی می شود. شما برای مدیریت چنین رویدادی از کنترل کننده رویداد ()onMenuItemClick استفاده خواهید کرد.
()onCreateContextMenu ()onCreateContextMenuItemListenerاین زمانی فرخوانی می شود که یک منوی context شروع به ایجاد شدن می کند.

تعداد بیشتری Event Listeners به عنوان بخشی از کلاس View مانند OnHoverListener ، OnDragListener و غیره وجود دارد که ممکن است برای برنامه شما مورد نیاز باشد.

ایجاد Event Listeners

ایجاد Event Listeners فرآیندی است که طی آن یک رویدادگیر در یک Event Listeners ثبت می شود تا درهنگام  فراخوانی، Event Eventer را فراخوانی می کند. اگرچه چندین روش دشوار برای ایجاد Event Listeners رویداد شما برای هر رویدادی وجود دارد ، اما من قصد دارم فقط ۳ روش برتر را لیست کنم که از این طریق می توانید بر اساس شرایط موجود از هر یک از آنها استفاده کنید.

  • با استفاده از یک کلاس داخلی ناشناس
  • کلاس فعالیت رابط Listener را پیاده سازی می کند.
  • با استفاده از فایل طرح بندی activity_main.xml برای تعیین مستقیم کنترل کننده رویداد.

 

حالت Touch

کاربران می توانند با استفاده از کلیدهای سخت افزاری یا دکمه ها یا لمس صفحه نمایش با دستگاه های خود ارتباط برقرار کنند. لمس صفحه نمایش دستگاه را در حالت touch قرار می دهد. سپس کاربر می تواند با لمس دکمه های مجازی روی صفحه، تصاویر و غیره با آن ارتباط برقرار کند. شما می توانید با فراخوانی روش View class isInTouchMode بررسی کنید که آیا دستگاه در حالت touch است.

حالت Focus

یک view یا widget معمولاً برجسته می شود یا هنگامی که در حالت فوکوس است، مکان نما چشمک می زند. این نشان می دهد که آماده پذیرش ورودی از کاربر است.

  • ()isFocusable  – مقدار درست یا نادرست را برمی گرداند( فوکوس بودن یا نبودن را)
  • ()isFocusableInTouchMode  – بررسی می کند که آیا view در حالت touch قابلیت فوکوس را دارد.
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 Listener با استفاده از یک کلاس داخلی ناشناس ایجاد می شود
در اینجا شما یک پیاده سازی ناشناخته از listener ایجاد خواهید کرد

در این کار متد های event handler می توانند به داده های خصوصی فعالیت دسترسی پیدا کنند. برای فراخوانی فعالیت به مرجعی نیاز نیست.

اما اگر کنترل کننده را به بیش از یک handler اعمال کنید، باید کد مربوط به کنترل کننده را  cut کرده و در محل مربوطه pass کنید. و اگر کد مربوط به هندلر طولانی است، نگهداری کد را سخت تر می کند.

در زیر مراحل ساده ای وجود دارد که نشان می دهد ما چگونه از کلاس Listener جداگانه برای ثبت و ضبط رویداد کلیک استفاده خواهیم کرد. روشی مشابه که می توانید Listener خود را برای هر نوع رویداد مورد نیاز دیگری پیاده سازی کنید.

 

شرح مراحل

۱- شما از Android studio IDE برای ایجاد یک برنامه Android استفاده خواهید کرد و نام آن را به عنوان myapplication در زیر یک بسته com.example.myapplication قرار داده اید ، همانطور که در بخش سلام جهانی مثال توضیح داده شده است.
۲- فایل src / MainActivity.java را تغییر دهید تا رویدادهای listeners و handleers را برای دو دکمه تعریف شده اضافه کنید.
۳- محتوای پرونده res / layout / activity_main.xml را اصلاح کنید تا شامل کنترل های UI باشد.
۴- نیازی به اعلام ثابت های رشته ای پیش فرض نیست. Android studio از ثابت های پیش فرض مراقبت می کند.
۵- برای راه اندازی شبیه ساز اندروید و تأیید نتیجه تغییرات انجام شده در برنامه، برنامه را اجرا کنید.

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 وجود دارد –

<?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>

بیایید برنامه خود را اجرا کنیم! من تصور می کنم شما AVD خود را هنگام راه اندازی محیط ایجاد کرده اید. برای اجرای برنامه از Android studio، یکی از پرونده های فعالیت پروژه خود را باز کنید و از نوار ابزار روی Android StudioRun Icon کلیک کنید. Android Studio برنامه را روی AVD شما نصب کرده و شروع به کار می کند و اگر با تنظیمات و برنامه هایتان همه چیز خوب باشد، زیر پنجره شبیه ساز نمایش داده می شود.

 

سپس روی یکی از دو دکمه ای که در رابط کاربری ایجاد کرده ایم کلیک کنید تا مشاهده کنید اندازه ی متن Hello World تغییر می کند.

منبع.

لیست جلسات قبل آموزش برنامه نویسی اندروید

  1. نگاهی کلی به برنامه نویسی اندروید
  2. تنظیمات محیط  در برنامه نویسی اندروید
  3. معماری برنامه نویسی اندروید
  4. اجزای برنامه در برنامه نویسی اندروید
  5. Hello World در برنامه نویسی اندروید
  6. سازماندهی و دسترسی به منابع در برنامه نویسی اندروید
  7. فعالیت در برنامه نویسی اندروید
  8. سرویس در برنامه نویسی اندروید
  9. گیرنده های پخش در برنامه نویسی اندروید
  10. ارائه دهنده محتوا در برنامه نویسی اندروید
  11. قطعات در برنامه نویسی اندروید
  12. Intent و فیلتر در برنامه نویسی اندروید
  13. طرح بندی رابط کاربری در برنامه نویسی اندروید
  14. کنترل های رابط کاربری در برنامه نویسی اندروید
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه