Учебники

Android — обработка событий

События — это полезный способ сбора данных о взаимодействии пользователя с интерактивными компонентами Приложений. Как нажатие кнопок или касание экрана и т. Д. Платформа Android поддерживает очередь событий в порядке «первым пришел — первым вышел» (FIFO). Вы можете зафиксировать эти события в своей программе и предпринять соответствующие действия в соответствии с требованиями.

Существуют следующие три понятия, связанные с управлением событиями в Android:

  • Прослушиватели событий. Прослушиватель событий — это интерфейс в классе View, содержащий единственный метод обратного вызова. Эти методы будут вызываться платформой Android, когда представление, для которого зарегистрирован прослушиватель, запускается при взаимодействии пользователя с элементом в пользовательском интерфейсе.

  • Регистрация прослушивателей событийрегистрация событий — это процесс, с помощью которого обработчик событий регистрируется в прослушивателе событий, так что обработчик вызывается, когда прослушиватель событий запускает событие.

  • Обработчики событий — когда происходит событие, и мы регистрируем прослушиватель события для события, прослушиватель события вызывает обработчики событий, что является методом, который фактически обрабатывает событие.

Прослушиватели событий. Прослушиватель событий — это интерфейс в классе View, содержащий единственный метод обратного вызова. Эти методы будут вызываться платформой Android, когда представление, для которого зарегистрирован прослушиватель, запускается при взаимодействии пользователя с элементом в пользовательском интерфейсе.

Регистрация прослушивателей событийрегистрация событий — это процесс, с помощью которого обработчик событий регистрируется в прослушивателе событий, так что обработчик вызывается, когда прослушиватель событий запускает событие.

Обработчики событий — когда происходит событие, и мы регистрируем прослушиватель события для события, прослушиватель события вызывает обработчики событий, что является методом, который фактически обрабатывает событие.

Слушатели событий и обработчики событий

Обработчик события Слушатель событий и описание
по щелчку()

OnClickListener ()

Это вызывается, когда пользователь либо щелкает, либо касается, либо фокусируется на любом виджете, таком как кнопка, текст, изображение и т. Д. Вы будете использовать обработчик события onClick () для обработки такого события.

onLongClick ()

OnLongClickListener ()

Это вызывается, когда пользователь либо щелкает, либо касается, либо фокусируется на каком-либо виджете, таком как кнопка, текст, изображение и т. Д. В течение одной или нескольких секунд. Вы будете использовать обработчик события onLongClick () для обработки такого события.

onFocusChange ()

OnFocusChangeListener ()

Это вызывается, когда виджет теряет фокус, т.е. пользователь уходит от просмотра элемента. Вы будете использовать обработчик события onFocusChange () для обработки такого события.

OnKey ()

OnFocusChangeListener ()

Это вызывается, когда пользователь фокусируется на элементе и нажимает или отпускает аппаратную клавишу на устройстве. Вы будете использовать обработчик события onKey () для обработки такого события.

onTouch ()

OnTouchListener ()

Это вызывается, когда пользователь нажимает клавишу, отпускает клавишу или любой жест движения на экране. Вы будете использовать обработчик события onTouch () для обработки такого события.

onMenuItemClick ()

OnMenuItemClickListener ()

Это вызывается, когда пользователь выбирает пункт меню. Вы будете использовать обработчик события onMenuItemClick () для обработки такого события.

onCreateContextMenu ()

onCreateContextMenuItemListener ()

Это вызывается, когда создается контекстное меню (в результате длительного «длинного щелчка»)

OnClickListener ()

Это вызывается, когда пользователь либо щелкает, либо касается, либо фокусируется на любом виджете, таком как кнопка, текст, изображение и т. Д. Вы будете использовать обработчик события onClick () для обработки такого события.

OnLongClickListener ()

Это вызывается, когда пользователь либо щелкает, либо касается, либо фокусируется на каком-либо виджете, таком как кнопка, текст, изображение и т. Д. В течение одной или нескольких секунд. Вы будете использовать обработчик события onLongClick () для обработки такого события.

OnFocusChangeListener ()

Это вызывается, когда виджет теряет фокус, т.е. пользователь уходит от просмотра элемента. Вы будете использовать обработчик события onFocusChange () для обработки такого события.

OnFocusChangeListener ()

Это вызывается, когда пользователь фокусируется на элементе и нажимает или отпускает аппаратную клавишу на устройстве. Вы будете использовать обработчик события onKey () для обработки такого события.

OnTouchListener ()

Это вызывается, когда пользователь нажимает клавишу, отпускает клавишу или любой жест движения на экране. Вы будете использовать обработчик события onTouch () для обработки такого события.

OnMenuItemClickListener ()

Это вызывается, когда пользователь выбирает пункт меню. Вы будете использовать обработчик события onMenuItemClick () для обработки такого события.

onCreateContextMenuItemListener ()

Это вызывается, когда создается контекстное меню (в результате длительного «длинного щелчка»)

Есть еще много прослушивателей событий, доступных как часть класса View, таких как OnHoverListener, OnDragListener и т. Д., Которые могут понадобиться для вашего приложения. Поэтому я рекомендую обратиться к официальной документации для разработки приложений для Android на случай, если вы собираетесь разрабатывать сложные приложения.

Регистрация слушателей событий

Регистрация события — это процесс, с помощью которого обработчик событий регистрируется в прослушивателе событий, так что обработчик вызывается, когда прослушиватель событий запускает событие. Хотя существует несколько хитрых способов зарегистрировать прослушиватель событий для любого события, но я собираюсь перечислить только три лучших способа, из которых вы можете использовать любой из них в зависимости от ситуации.

  • Использование анонимного внутреннего класса

  • Класс Activity реализует интерфейс Listener.

  • Использование файла макета activity_main.xml для непосредственного указания обработчика событий.

Использование анонимного внутреннего класса

Класс Activity реализует интерфейс Listener.

Использование файла макета activity_main.xml для непосредственного указания обработчика событий.

Ниже раздел предоставит вам подробные примеры по всем трем сценариям —

Сенсорный режим

Пользователи могут взаимодействовать со своими устройствами, используя аппаратные клавиши или кнопки или касаясь экрана. Прикосновение к экрану переводит устройство в сенсорный режим. Затем пользователь может взаимодействовать с ним, касаясь виртуальных кнопок на экране, изображений и т. Д. Чтобы проверить, находится ли устройство в сенсорном режиме, вызовите метод isInTouchMode () класса View.

фокус

Вид или виджет обычно подсвечиваются или отображают мигающий курсор, когда они находятся в фокусе. Это указывает на то, что он готов принять ввод от пользователя.

  • isFocusable () — возвращает true или false

  • isFocusableInTouchMode () — проверяет, является ли представление фокусируемым в сенсорном режиме. (Вид может быть фокусируемым при использовании аппаратной клавиши, но не когда устройство находится в сенсорном режиме)

isFocusable () — возвращает true или false

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) ;
}

Примеры обработки событий

Регистрация слушателей событий с использованием анонимного внутреннего класса

Здесь вы создадите анонимную реализацию слушателя и будете полезны, если каждый класс применяется только к одному элементу управления, и у вас есть преимущество для передачи аргументов обработчику событий. В этом подходе методы обработчика событий могут получить доступ к закрытым данным Activity. Никакая ссылка не требуется для вызова деятельности.

Но если вы примените обработчик к более чем одному элементу управления, вам придется вырезать и вставить код для обработчика, и если код для обработчика будет длинным, это усложнит обслуживание кода.

Ниже приведены простые шаги, чтобы показать, как мы будем использовать отдельный класс Listener для регистрации и захвата события щелчка. Аналогичным образом вы можете реализовать свой слушатель для любого другого необходимого типа события.

шаг Описание
1 Вы будете использовать IDE Android studio для создания приложения Android и назовите его myapplication в пакете com.example.myapplication, как описано в главе « Пример Hello World» .
2 Измените файл src / MainActivity.java, чтобы добавить прослушиватели и обработчики событий щелчка для двух определенных кнопок.
3 Измените содержимое файла res / layout / activity_main.xml, чтобы включить элементы управления пользовательского интерфейса Android.
4 Нет необходимости объявлять строковые константы по умолчанию. Android-студия заботится о константах по умолчанию.
5 Запустите приложение, чтобы запустить эмулятор Android и проверить результат изменений, внесенных в приложение.

Ниже приводится содержимое измененного основного файла активности 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 указывает на логотип tutorialspoint

<?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 . Я предполагаю, что вы создали свой AVD во время настройки среды. Чтобы запустить приложение из Android Studio, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок с панели инструментов. Android Studio устанавливает приложение на AVD и запускает его, и если все в порядке с вашими настройками и приложением, оно отобразится в следующем окне эмулятора —

Обработка событий Android

Теперь вы попытаетесь нажать две кнопки, одну за другой, и вы увидите, что шрифт текста Hello World изменится, что происходит потому, что для каждого события click вызывается метод обработчика зарегистрированного события click.

Упражнение

Я рекомендую попробовать написать разные обработчики событий для разных типов событий и понять точное различие в разных типах событий и их обработку. События, связанные с виджетами menu, spinner, picker, немного отличаются, но они также основаны на тех же принципах, которые описаны выше.