التعامل مع الأحداث في برمجة Android Event Handling#

التعامل مع الأحداث في برمجة

 Android  Event Handling#




التعامل مع الأحداث في برمجة Android  Event Handling#

الأحداث هي طريقة مفيدة لجمع البيانات حول تفاعل المستخدم مع المكونات التفاعلية للتطبيقات.  اضغط زر أعجبني أو لمس الشاشة وما إلى ذلك. يحتفظ إطار Android بقائمة انتظار الأحداث باعتبارها أساس الدخول أولاً (FIFO).  يمكنك التقاط هذه الأحداث في برنامجك واتخاذ الإجراء المناسب وفقًا للمتطلبات.

هناك ثلاثة مفاهيم متعلقة بإدارة أحداث Android -

  • Event Listeners − مجتمعات الأحداث 
  • يعد مستمع الأحداث واجهة في فئة العرض تحتوي على طريقة رد اتصال واحدة.  سيتم استدعاء هذه الطرق بواسطة إطار عمل Android عندما يتم تشغيل طريقة العرض التي تم تسجيل المستمع بها من خلال تفاعل المستخدم مع العنصر الموجود في واجهة المستخدم.
  • Event Listeners Registration −  مسجل مجتمعات الاحداث
  • تسجيل الأحداث هو العملية التي يتم من خلالها تسجيل "معالج الأحداث" مع "مستمع الأحداث" بحيث يتم استدعاء المعالج عندما يقوم "مستمع الأحداث" بإطلاق الحدث.
  • 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()
يسمى هذا عندما يتم إنشاء قائمة السياق (نتيجة "نقرة طويلة" مستمرة)

هناك العديد من مستمعي الأحداث المتاحة كجزء من فئة عرض مثل OnHoverListener ، OnDragListener وغيرها والتي قد تكون مطلوبة للتطبيق الخاص بك.  لذلك أوصي بإحالة الوثائق الرسمية لتطوير تطبيقات Android في حالة تطوير تطبيقات متطورة.

Event Listeners Registration تسجيل مجتمعات الحدث

تسجيل الأحداث هو العملية التي يتم من خلالها تسجيل "معالج الأحداث" مع "مستمع الأحداث" بحيث يتم استدعاء المعالج عندما يقوم "مستمع الأحداث" بإطلاق الحدث.  على الرغم من وجود عدة طرق صعبة لتسجيل مستمع الأحداث الخاص بك لأي حدث ، إلا أنني سأقوم فقط بسرد أفضل 3 طرق يمكنك من خلالها استخدام أيٍّ منها بناءً على الموقف.

 باستخدام فئة الداخلية مجهولة

 تطبق فئة النشاط واجهة المستمع.

 باستخدام Layout file activity_main.xml لتحديد معالج الأحداث مباشرة.

 سيوفر لك القسم أدناه أمثلة مفصلة لجميع السيناريوهات الثلاثة -

Touch Mode وضع اللمس

يمكن للمستخدمين التفاعل مع أجهزتهم باستخدام مفاتيح الأجهزة أو الأزرار أو لمس الشاشة ، ويؤدي لمس الشاشة إلى وضع الجهاز في وضع اللمس.  يمكن للمستخدم بعد ذلك التفاعل معه من خلال لمس الأزرار والصور الظاهرة على الشاشة ، وما إلى ذلك. يمكنك معرفة ما إذا كان الجهاز في وضع اللمس عن طريق الاتصال
طريقة عرض الفئة هي طريقة InTouchMode ().

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 Examples أمثلة على الاحداث

تسجيل مستمعي الأحداث باستخدام الدرجة الداخلية المجهولة

 ستقوم هنا بإنشاء تطبيق مجهول للمستمع وستكون مفيدة إذا تم تطبيق كل فئة على عنصر تحكم واحد فقط ولديك ميزة لتمرير الوسائط إلى معالج الأحداث.  في هذا النهج ، يمكن لطرق معالج الأحداث الوصول إلى البيانات الخاصة بالنشاط.  ليس هناك حاجة إلى مرجع للاتصال بالنشاط.


 ولكن إذا قمت بتطبيق المعالج على أكثر من عنصر تحكم واحد ، فسيتعين عليك قص ولصق الرمز الخاص بالمعالج وإذا كانت شفرة المعالج طويلة ، فإن ذلك يجعل صيانة التعليمات البرمجية أكثر صعوبة.


 فيما يلي الخطوات البسيطة لإظهار كيف سنستخدم فئة المستمع المنفصلة للتسجيل والتقاط حدث النقر.  بنفس الطريقة التي يمكنك بها تطبيق المستمع لأي نوع حدث آخر مطلوب.

الخطوةالوصف
1ستستخدم Android studio IDE لإنشاء تطبيق Android وتسميته كتطبيق عملي ضمن حزمة com.example.myapplication كما هو موضح في فصل Hello World Example.
2Modify src/MainActivity.java
ملف لإضافة مستمعي الحدث انقر ومعالجات للزر اثنين المعرفة.
3تعديل المحتوى الافتراضي ل
 res/layout/activity_main.xml
ملف لتشمل الضوابط واجهة المستخدم الروبوت.
4لا حاجة إلى الإعلان عن ثوابت السلسلة الافتراضية. يعتني استوديو أندرويد الثوابت الافتراضية.
5قم بتشغيل التطبيق لتشغيل محاكي Android والتحقق من نتيجة التغييرات التي تمت في التطبيق.
فيما يلي محتوى النشاط الرئيسي المعدل
file 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 file 

xml version="1.0" encoding="utf-8"?>
 
   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">
   
   
      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"/>
      
   
      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" />
      
   
      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" />
      
   
التالي سيكون محتوى
 res/values/strings.xml 
لتحديد اثنين من الثوابت الجديدة -
xml version="1.0" encoding="utf-8"?>

    name="app_name">myapplication
فيما يلي المحتوى الافتراضي ل
AndroidManifest.xml −
xml version="1.0" encoding="utf-8"?>
 xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myapplication" >
      
   
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      
         android:name="com.example.myapplication.MainActivity"
         android:label="@string/app_name" >
      
         
             android:name="android.intent.action.MAIN" />
             android:name="android.intent.category.LAUNCHER" />
         
دعنا نحاول تشغيل تطبيق myapplication الخاص بك.  أفترض أنك قمت بإنشاء إعداد بيئة AVDwhile الخاص بك.  لتشغيل التطبيق من Android Studio ، افتح أحد ملفات أنشطة المشروع وانقر على أيقونة Run Eclipse Run Icon من شريط الأدوات.  يقوم Android Studio بتثبيت التطبيق على AVD الخاص بك ويبدأ تشغيله وإذا كان كل شيء على ما يرام مع الإعداد والتطبيق ، فسيتم عرضه بعد نافذة Emulator -