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

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

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

  • شنود رویداد : شنود رویداد یک interface در کلاس View است که شامل یک متد پاسخ به تماس است. این متدها توسط فریمورک اندروید زمانی فراخوانی می‌شوند که view که listener برروی آن ثبت شده است توسط تعامل کاربر با مورد در UI فعال شود.
  • ثبت نام شنود رویداد : ثبت رویداد فرآیندی است که طی آن یک Event Listener در یک Event Handler ثبت می‌شود تا زمانی که آن رویداد بعد از تعامل کاربر صدا زده شود.
  • Handlerهای رویداد : handlerهای رویداد مسولیت مدیریت شنودها را برعهده دارند. هنگامی که رویدادی اتفاق می افتد handler شنودهای ثبت شده را چک میکند و آخرین آیتم را فراخوانی میکند.

listenerها و handlerهای رویداد

شنود رویداد و توضیحات handler رویداد

OnClickListener()

زمانی که کاربر روی هر ویجتی مانند دکمه، متن، تصویر و غیره کلیک می‌کند یا لمس می‌کند یا روی آن تمرکز می‌کند، این handler خوانده می‌شود.

onClick()

OnLongClickListener()

این handler زمانی فراخوانی می شود که کاربر برای یک یا چند ثانیه روی هر ویجتی مانند دکمه، متن، تصویر و غیره کلیک کند یا لمس کند یا بر روی آن تمرکز کند. برای مدیریت چنین رویدادی از کنترل کننده رویداد onLongClick() استفاده خواهید کرد.

onLongClick()

OnFocusChangeListener()

زمانی این handler فراخوانی می شود که ویجت تمرکز خود را از دست بدهد و کاربر از آیتم view دور شود. برای مدیریت چنین رویدادی از کنترل کننده رویداد onFocusChange() استفاده خواهید کرد.

onFocusChange()

OnFocusChangeListener()

هنگامی که کاربر بر روی مورد متمرکز شده و یک کلید سخت افزاری را روی دستگاه فشار داده یا رها می کند، این handler فراخوانی می شود. شما از onKey() handler رویداد برای مدیریت چنین رویدادی استفاده خواهید کرد.

onKey()

OnTouchListener()

زمانی که کاربر صفحه یا یک کلیدی را فشار دهد، رها کند یا هر حرکتی روی صفحه نمایش انجام دهد این handler فراخوانی میشود. شما از onTouch() handler رویداد برای مدیریت چنین رویدادی استفاده خواهید کرد.

onTouch()

OnMenuItemClickListener()

این handler زمانی فراخوانی می شود که کاربر یک آیتم منو را انتخاب کند. برای مدیریت چنین رویدادی از کنترل کننده رویداد onMenuItemClick() استفاده خواهید کرد.

onMenuItemClick()

onCreateContextMenuItemListener()

هنگامی که منوی زمینه در حال ساخت است (به عنوان نتیجه یک “کلیک طولانی” پایدار) این handler فراخوانی میشود.

onCreateContextMenu()

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

ثبت نام شنود رویداد

ثبت رویداد فرآیندی است که طی آن یک Event Listener در یک Event Handler ثبت می‌شود تا زمانی که آن رویداد بعد از تعامل کاربر صدا زده شود.

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

بخش زیر نمونه های دقیقی را در مورد هر سه سناریو به شما ارائه می دهد.

حالت لمس کردن

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

تمرکز

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

  • isFocusable() – این متد یک مقدار boolean برمیگرداند.
  • isFocusableInTouchMode() – بررسی می کند که آیا view در حالت لمسی قابل فوکوس است یا خیر. (ممکن است در هنگام استفاده از کلید سخت افزاری، یک نما قابل فوکوس باشد، اما زمانی که دستگاه در حالت لمسی است، قابل فوکوس نباشد)
android:foucsUp="@=id/button_l"

onTouchEvent()

public boolean onTouchEvent(motionEvent event){
   switch(event.getAction()){
      case TOUCH_DOWN:
      Toast.makeText(this,"شما انگشت خود را روی دکمه گذاشتید",Toast.LENTH_LONG).show();
      break();
   
      case TOUCH_UP:
      Toast.makeText(this,"شما انگشت خود را از روی دکمه برداشتید",Toast.LENTH_LONG).show();
      break;
   
      case TOUCH_MOVE:
      Toast.makeText(this,"شما انگشت خود را بر روی دکمه حرکت دادید"Toast.LENTH_LONG).show();
      break;
   }
   return super.onTouchEvent(event) ;
}

مثال مدیریت رویداد ها در اندروید

ثبت نام listener رویداد با استفاده از یک کلاس داخلی ناشناس.

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

اما اگر handler را روی بیش از یک کنترل اعمال کنید، باید کد مربوط به کنترل کننده را برش داده و جایگذاری کنید و اگر کد مربوط به هندلر طولانی باشد، حفظ کد را سخت تر می کند.

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

توضیحات مرحله
ابتدا یک پروژه جدید در اندروید استودیو با یک پکیج دلخواه ایجاد کنید و ادامه مراحل را دنبال کنید. 1
کدهای درون فایل MainActivity.class را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 2
کدهای درون فایل activity_main.xml را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 3
برنامه را بر روی یک تلفن واقعی یا شبیه ساز اجرا کنید و تست را انجام بدهید. 4

کدهای فایل MainActivity.java

package com.seven.cloner.articleslib;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private ProgressDialog progress;
    private Button b1, b2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progress = new ProgressDialog(this);

        b1 = findViewById(R.id.button);
        b2 = findViewById(R.id.button2);
        b1.setOnClickListener(v -> {
            TextView txtView = findViewById(R.id.textView);
            txtView.setTextSize(25);
        });

        b2.setOnClickListener(v -> {
            TextView txtView = findViewById(R.id.textView);
            txtView.setTextSize(55);
        });
    }
}

فایل layout_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:padding="32dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="مدیریت رویداد ها"
        android:textSize="30dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:text="7Cloner.com"
        android:textColor="#009688"
        android:textSize="30dp" />

    <ImageButton
        android:id="@+id/imageButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView2"
        android:src="@drawable/abc" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="120dp"
        android:layout_below="@+id/imageButton"
        android:layout_centerHorizontal="true"
        android:text="متن کوچک" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="120dp"
        android:layout_below="@+id/button"
        android:layout_alignEnd="@+id/button"
        android:layout_alignRight="@+id/button"
        android:text="متن بزرگ" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp"
        android:text="7CLONER.COM"
        android:textColor="#4CAF50"
        android:textSize="25dp" />

</RelativeLayout>

رویداد در اندروید

حالا سعی کنید یکی یکی روی دو دکمه کلیک کنید و می‌بینید که فونت متن 7CLONER.COM تغییر می‌کند. این اتفاق می‌افتد چون متد کنترل رویداد کلیک برای کیک بر روی دکمه ثبت‌شده است.

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر نیاز است تا ابتدا وارد سایت شوید.

هیچ نظری ارسال نشده است.

قیمت آموزش
رایگان
نوع دسترسی
رایگان

این مقاله در حال حاضر تنها به روش رایگان در دسترس می باشد.

ناصر خالدی
مدرس دوره

ناصر خالدی

مهندس شبکه, امنیت, برنامه نویسی تلفن های هوشمند, طراح وب سایت و متخصص هوش مصنوعی

گفتگوی برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن

دوره های پیشنهادی

مقالات پیشنهادی

وردپرس

وردپرس یک سیستم مدیریت محتوای قوی می باشد که با استفاده از آن می توان وب سایت ها و وبلاگ های گوناگونی با هر شرایطی را طراحی کرد چرا که این سیستم و ...


۸۰۹
۰
۱۳ آذر ۱۳۹۹

پی اچ پی - PHP

با استفاده از این زبان می توان وب سایت های پویا طراحی کرد, این زبان می تواند با HTML ادغام شود, در حقیقت یک زبان اسکریپتی متن باز و رایگان است. یعنی زمانی که سرور درخواست ...


۹۴۸
۰
۱۳ آذر ۱۳۹۹

هوش مصنوعی

هوش مصنوعی یا هوش ماشینی, به هوشمندی نشان داده شده توسط ماشین در شرایط مختلف گفته میشود که مقابل هوش طبیعی در انسان ها قرار دارد که ...


۸۶۴
۰
۱۱ آذر ۱۳۹۹

جاوا اسکریپت

جاوا اسکریپت یک زبان پویا و محبوب مبتنی بر شیء, داینامیک و مفسری می باشد. این زبان برای برنامه نویسی سمت سرور و کلاینت استفاده میشود که ...


۸۶۹
۰
۱۳ آذر ۱۳۹۹