Diferencia entre revisiones de «PDM Eventos nos views»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 193: Línea 193:
  
 
==EditText==
 
==EditText==
 +
 +
* Neste view normalmente non queremos xestionar un evento de Click sobre el (se pode facer igual que no caso anterior).
 +
: Un evento que se podería querer controlar é a [https://wiki.cifprodolfoucha.es/index.php?title=EditText._Control_de_eventos_I#Distintas_acci.C3.B3ns_da_tecla_.22Enter.22:_android:imeOptions tecla do teclado virtual que indica unha acción].
 +
 +
 +
*Codificación en Java que captura a acción '''actionSend''' dun campo de texto (email) e o que fai e recoller o texto desa caixa de texto, o e-mail, e volver a imprimir unha mensaxe nesa mesma caixa de texto.
 +
 +
<syntaxhighlight lang="java" line highlight="20,22-34">
 +
package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.EditTexto;
 +
 +
import android.app.Activity;
 +
import android.os.Bundle;
 +
import android.view.KeyEvent;
 +
import android.view.inputmethod.EditorInfo;
 +
import android.widget.EditText;
 +
import android.widget.TextView;
 +
 +
import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
 +
 +
public class UD02_01_EditText extends Activity {
 +
 +
@Override
 +
protected void onCreate(Bundle savedInstanceState) {
 +
super.onCreate(savedInstanceState);
 +
setContentView(R.layout.activity_u2_08_edit_text);
 +
 +
 +
final EditText etMail = (EditText) findViewById(R.id.et_mail);
 +
 +
etMail.setOnEditorActionListener(new OnEditorActionListener() {
 +
    @Override
 +
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
 +
        boolean handled = false;
 +
        if (actionId == EditorInfo.IME_ACTION_SEND) {
 +
            v.setText("Mensaxe enviada a: "+v.getText());
 +
      //etMail.setText("Mensaxe enviada a: " + etMail.getText());       
 +
            handled = true;
 +
        }
 +
       
 +
        return handled;
 +
    }
 +
});
 +
 +
}
 +
 +
}
 +
</syntaxhighlight>
 +
 +
*'''Liña 20''': creamos un obxecto (etMail) que apunta ao EditText no que se introduce o mail.
 +
*'''Liña 22 - 33''': chamamos a método Listener (''escoitador'') (que veremos máis adiante) do obxecto etMail: '''setOnEditorActionListener ()'''
 +
**Ese método será chamado cando se realice unha acción nun TextView
 +
**Lembrar que un EditText é unha subclase de TextView
 +
**Por exemplo, cando se prema unha tecla ou cando haxa unha acción IME seleccionada polo usuario.
 +
**Como parámetro váiselle pasar a creación dunha clase anónima que implementa unha interface (OnEditorActionListener) para a cal hai que sobreescribir o único método que ten a interface (onEditorAction()).
 +
 +
 +
*'''Liñas 24-29''': sobreescritura do método OnEditorAction() no que se reciben 3 parámetros:
 +
**O TextView que xerou o evento (v). Neste caso a caixa de texto do mail
 +
**O ID da acción enviada
 +
**E se o evento foi xerado pola tecla '''Enter''' ou non (event).
 +
**Comprobamos se o ID da acción é o SEND, nese caso modificamos o contido da caixa de texto do mail.
 +
 +
 +
*'''Liña 28''': realiza a mesma función ca 27. Lembrar que '''v''' é un TextView que apunta á caixa de edición do mail e que etMail é un EditText que apunta ao mesmo elemento.
 +
 +
 +
*Para que o IDE nos cre a '''clase anónima''':
 +
**Escribir a chamada ao método (ollo ; final incluído):  '''etMail.setOnEditorActionListener( );'''
 +
**Escribir '''new''' entre os paréntesis: '''etMail.setOnEditorActionListener(new  );'''
 +
**Premer CTRL+Barra espaciadora e xa o sistema completa todo o demais.
 +
**Logo só queda poñer o noso código no método a sobreescribir.
 +
 +
 +
*Lembrar premer '''SHIFT+CTRL+O''' para importar os paquetes correspondentes.
 +
 +
 +
 +
<gallery caption="Acción Send" widths="350" heights="300px" perrow="2">
 +
Image:PDM_EditText_14.jpg| Ao premer en '''Send'''
 +
Image:PDM_EditText_15.jpg| O sistema captura o evento e envía unha mensaxe a o mesma caixa de texto.
 +
</gallery>
 +
 +
 
<br />
 
<br />
 +
 
==Button==
 
==Button==
  

Revisión del 19:30 14 nov 2020

Introducción

  • Neste punto imos ver como xestionar os principais eventos que se poidan producir nos Views que vimos na Unidade 2.
Lembrar que xa está posta nun punto anterior a explicación de como funcionan as interfaces e como asocialas aos Views empregando o método setOnZZZZZZZ correspondente.


  • Nota: En moitos controis, o evento principal que ides querer controlar, será o 'Click' sobre o mesmo. Lembrar que xa vimos no punto anterior que o método que rexistra dito evento está definido na clase View e polo tanto ides poder xestionar da mesma forma o evento Click en calquera View que teñades.



Preparando a Activity

PDM xesteventos base 1.jpg


  • Crea un paquete Eventos e dentro del imos crear unha nova 'Empty Activity' de nome: UD03_01_xesteventos_base de tipo Launcher.
Modifica o arquivo AndroidManifiest.xml e engade unha label á activity como xa vimos na creación do proxecto base.

Código do Layout:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cifprodolfoucha.aprendiendo.Eventos.UD03_01_xesteventos_base">

    <TextView
        android:id="@+id/txvTextoTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="Texto Text View"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/etvTextoEditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="Texto Edit Text"
        android:inputType="textPersonName"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txvTextoTextView" />

    <Button
        android:id="@+id/btnBoton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginBottom="8dp"
        android:text="BOTÓN"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ImageButton
        android:id="@+id/imgbtnImageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btnBoton"
        app:srcCompat="@android:drawable/star_on" />

    <CheckBox
        android:id="@+id/chk_Uno"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Check Uno"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etvTextoEditText" />

    <CheckBox
        android:id="@+id/chk_Dos"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Check Dos"
        app:layout_constraintStart_toEndOf="@+id/chk_Uno"
        app:layout_constraintTop_toBottomOf="@+id/etvTextoEditText" />

    <CheckBox
        android:id="@+id/chk_Tres"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Check Tres"
        app:layout_constraintStart_toEndOf="@+id/chk_Dos"
        app:layout_constraintTop_toBottomOf="@+id/etvTextoEditText" />

    <RadioGroup
        android:id="@+id/rgrpGrupoBotons"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:checkedButton="@id/rbtnIOpcionA"
        android:orientation="horizontal"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/chk_Uno">

        <RadioButton
            android:id="@+id/rbtnIOpcionA"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Opción A)" />

        <RadioButton
            android:id="@+id/rbtnOpcionB"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Opción B)" />
    </RadioGroup>

    <ToggleButton
        android:id="@+id/tbtnToogleBoton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="ToggleButton"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/rgrpGrupoBotons" />

    <Switch
        android:id="@+id/swbSwitchButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Switch"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tbtnToogleBoton" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fabFloatActionButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:clickable="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:srcCompat="@android:drawable/ic_input_add"  />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="114dp"
        android:layout_height="97dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:background="#AC2727"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/swbSwitchButton"
        app:srcCompat="@android:drawable/btn_star_big_on" />
</androidx.constraintlayout.widget.ConstraintLayout>


TextView

  • Neste control poderíamos querer facer algo cando clickeamos sobre o texto.

Evento Click

  • Como expliquei anteriormente o evento Click xestionase dende a Interface OnClickListener mediante o método setOnClickListener que se atopa definido na clase View e polo tanto a forma de xestionalo sempre é a mesma.
  • Código de exemplo:




EditText

  • Neste view normalmente non queremos xestionar un evento de Click sobre el (se pode facer igual que no caso anterior).
Un evento que se podería querer controlar é a tecla do teclado virtual que indica unha acción.


  • Codificación en Java que captura a acción actionSend dun campo de texto (email) e o que fai e recoller o texto desa caixa de texto, o e-mail, e volver a imprimir unha mensaxe nesa mesma caixa de texto.
 1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.EditTexto;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.KeyEvent;
 6 import android.view.inputmethod.EditorInfo;
 7 import android.widget.EditText;
 8 import android.widget.TextView;
 9 
10 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
11 
12 public class UD02_01_EditText extends Activity {
13 
14 	@Override
15 	protected void onCreate(Bundle savedInstanceState) {
16 		super.onCreate(savedInstanceState);
17 		setContentView(R.layout.activity_u2_08_edit_text);
18 		
19 		
20 		final EditText etMail = (EditText) findViewById(R.id.et_mail);
21 
22 		etMail.setOnEditorActionListener(new OnEditorActionListener() {
23 		    @Override
24 		    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
25 		        boolean handled = false;
26 		        if (actionId == EditorInfo.IME_ACTION_SEND) {
27 		            v.setText("Mensaxe enviada a: "+v.getText());
28    			    //etMail.setText("Mensaxe enviada a: " + etMail.getText());        
29 		            handled = true;
30 		        }
31 		        
32 		        return handled;
33 		    }
34 		});
35 		
36 	}
37 
38 }
  • Liña 20: creamos un obxecto (etMail) que apunta ao EditText no que se introduce o mail.
  • Liña 22 - 33: chamamos a método Listener (escoitador) (que veremos máis adiante) do obxecto etMail: setOnEditorActionListener ()
    • Ese método será chamado cando se realice unha acción nun TextView
    • Lembrar que un EditText é unha subclase de TextView
    • Por exemplo, cando se prema unha tecla ou cando haxa unha acción IME seleccionada polo usuario.
    • Como parámetro váiselle pasar a creación dunha clase anónima que implementa unha interface (OnEditorActionListener) para a cal hai que sobreescribir o único método que ten a interface (onEditorAction()).


  • Liñas 24-29: sobreescritura do método OnEditorAction() no que se reciben 3 parámetros:
    • O TextView que xerou o evento (v). Neste caso a caixa de texto do mail
    • O ID da acción enviada
    • E se o evento foi xerado pola tecla Enter ou non (event).
    • Comprobamos se o ID da acción é o SEND, nese caso modificamos o contido da caixa de texto do mail.


  • Liña 28: realiza a mesma función ca 27. Lembrar que v é un TextView que apunta á caixa de edición do mail e que etMail é un EditText que apunta ao mesmo elemento.


  • Para que o IDE nos cre a clase anónima:
    • Escribir a chamada ao método (ollo ; final incluído): etMail.setOnEditorActionListener( );
    • Escribir new entre os paréntesis: etMail.setOnEditorActionListener(new );
    • Premer CTRL+Barra espaciadora e xa o sistema completa todo o demais.
    • Logo só queda poñer o noso código no método a sobreescribir.


  • Lembrar premer SHIFT+CTRL+O para importar os paquetes correspondentes.




Button

  • O principal evento que queremos xestionar nun botón é o Click sobre o mesmo.
Dito evento está asociado á interface OnClickListener.


FloatActionButton


ToggleButton


ImageButton


CheckBox


RadioButton-RadioGroup


ListView-Spinner






Enlace a la página principal de la UD3

Enlace a la página principal del curso





-- Ángel D. Fernández González -- (2020).