Diferencia entre revisiones de «EditText. Control de eventos I»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 20 ediciones intermedias de 2 usuarios)
Línea 35: Línea 35:
  
 
* Partimos que xa temos creado o proxecto inicial como [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Creando_proxecto_base xa indicamos anteriormente].
 
* Partimos que xa temos creado o proxecto inicial como [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Creando_proxecto_base xa indicamos anteriormente].
 +
: <u>Lembrar que se estades a empregar as bibliotecas de compatibilidade (por defecto), '''a vosa activity derivará de AppCompactActivity''' e non de Activity</u>.
 +
: Nos exemplos seguintes toda activity deriva de Activity, pero o normal é que empregedes AppCompactActivity (coidado ao copiar os exemplos).
 +
 
: Se non o temos creado antes, crea un paquete de nome '''UI''' como un subpaquete do teu paquete principal.
 
: Se non o temos creado antes, crea un paquete de nome '''UI''' como un subpaquete do teu paquete principal.
 
: Dentro do paquete UI, crearemos un novo paquete de nome: '''EditTexto'''.
 
: Dentro do paquete UI, crearemos un novo paquete de nome: '''EditTexto'''.
Línea 45: Línea 48:
  
 
===Distintos tipos de datos: a propiedade android:inputType===
 
===Distintos tipos de datos: a propiedade android:inputType===
 +
 +
* Máis información sobre todos os posibles valores de InputType [https://developer.android.com/reference/android/text/InputType.html neste enlace].
 +
 +
 
*A imaxe amosa un AVD con distintos tipos de campos, e cunha lenda interior indicando que tipo de dato hai que introducir nese campo.
 
*A imaxe amosa un AVD con distintos tipos de campos, e cunha lenda interior indicando que tipo de dato hai que introducir nese campo.
−
[[Image:Android_2013_U2_08_EditText_02.jpg|300px]]   
+
[[Image:PDM_EditText_1.jpg|400px]]   
  
 
*O layout xml que define esa pantalla é o seguinte. Observar como sempre as liñas marcadas.
 
*O layout xml que define esa pantalla é o seguinte. Observar como sempre as liñas marcadas.
Línea 96: Línea 103:
  
  
−
*Lanzamos a aplicación nun AVD sen botonera hardware.
 
 
*'''NOTA Edición 2015''': No caso de usar un AVD con API 21, o botón '''Next''' é substituído por '''">"''', o botón '''Done'' (Feito) por unha marca de verificación.  
 
*'''NOTA Edición 2015''': No caso de usar un AVD con API 21, o botón '''Next''' é substituído por '''">"''', o botón '''Done'' (Feito) por unha marca de verificación.  
 +
<gallery caption="Botóns teclado" widths="350" heights="300px" perrow="2">
 +
Image:PDM_EditText_7.jpg| En caso de varios campos no formulario, este botón indica '''Next''', pasar ao seguinte se se preme.
 +
Image:PDM_EditText_8.jpg| En caso dun campo multiliña, esta icona indica salto de liña ou '''Enter'''.
 +
Image:PDM_EditText_9.jpg| Cando chegamos ao derradeiro campo do formulario, aparece a icona de '''Done'''.
 +
</gallery>
 +
 +
 
<gallery caption="Distintos teclados" widths="350" heights="300px" perrow="2">
 
<gallery caption="Distintos teclados" widths="350" heights="300px" perrow="2">
−
Image:Android_2013_U2_08_EditText_03.jpg| Cando nos posicionamos no primeiro campo, como é para enteiros con signo (inputType), ofrece un teclado con só números, signo "-" e "." ou ",".<br>Probar a introducir un número decimal.<br> Observar tamén que a tecla '''Enter''' foi substituída por '''Next''', para pasar ao seguinte campo. Pronto estudaremos esta tecla.
+
Image:PDM_EditText_1.jpg| Cando nos posicionamos no primeiro campo, como é para enteiros con signo (inputType), ofrece un teclado con só números, signo "-" e "." ou ",".<br>Probar a introducir un número decimal.<br> Observar tamén que a tecla '''Enter''' foi substituída por '''Next''', para pasar ao seguinte campo. Pronto estudaremos esta tecla.
−
Image:Android_2013_U2_08_EditText_04.jpg| O segundo campo xa admite números decimais e con signo. A tecla '''Enter''' segue marcando '''Next'''.
+
Image:PDM_EditText_2.jpg| O segundo campo xa admite números decimais e con signo. A tecla '''Enter''' segue marcando '''Next'''.
−
Image:Android_2013_U2_08_EditText_05.jpg| O teclado xa contempla as letras e demais. Observar como de xeito automático pon en maiúsculas a primeira letra de cada palabra.
+
Image:PDM_EditText_3.jpg| O teclado xa contempla as letras e demais. Observar como de xeito automático pon en maiúsculas a primeira letra de cada palabra.
−
Image:Android_2013_U2_08_EditText_06.jpg| Como o terceiro campo é multiliña a tecla de '''Enter''' é agora un retorno de carro para poder seguir escribindo varias liñas no campo.  
+
Image:PDM_EditText_4.jpg| Como o terceiro campo é multiliña a tecla de '''Enter''' é agora un retorno de carro para poder seguir escribindo varias liñas no campo.  
−
Image:Android_2013_U2_08_EditText_07.jpg| Situámonos co dedo (ou rato) no seguinte campo. Agora o teclado xa ofrece a @ para o mail. A tecla '''Enter''' segue sendo '''Next'''.
+
Image:PDM_EditText_5.jpg| Situámonos co dedo (ou rato) no seguinte campo. Agora o teclado xa ofrece a @ para o mail. A tecla '''Enter''' segue sendo '''Next'''.
−
Image:Android_2013_U2_08_EditText_08.jpg| E agora é o momento de introducir a password. Observar como a tecla '''Enter''' é agora '''Done''' (Feito). Porque este campo é último e xa non hai máis a continuación.
+
Image:PDM_EditText_6.jpg| E agora é o momento de introducir a password. Observar como a tecla '''Enter''' é agora '''Done''' (Feito). Porque este campo é último e xa non hai máis a continuación.
−
Image:Android_2013_U2_08_EditText_09.jpg| Unha vez que se preme na tecla '''Done''' desaparece o teclado.
+
Image:PDM_EditText_10.jpg| Unha vez que se preme na tecla '''Done''' desaparece o teclado.
  
 
</gallery>
 
</gallery>
  
−
===Control de eventos no teclado virtual. Distintas accións da tecla "Enter": android:imeOptions===
+
===Distintas accións da tecla "Enter": android:imeOptions===
 
*A tecla '''Enter''' no teclado virtual pode realizar unha serie de accións:
 
*A tecla '''Enter''' no teclado virtual pode realizar unha serie de accións:
 
**Por defecto:
 
**Por defecto:
Línea 167: Línea 180:
  
 
<gallery caption="Introducir datos" widths="350" heights="300px" perrow="2">
 
<gallery caption="Introducir datos" widths="350" heights="300px" perrow="2">
−
Image:Android_2013_U2_08_EditText_10.jpg| O primeiro campo ten definida a acción '''Done''' para a tecla '''Enter'''.
+
Image:PDM_EditText_11.jpg| O primeiro campo ten definida a acción '''Done''' para a tecla '''Enter'''.
−
Image:Android_2013_U2_08_EditText_11.jpg| O segundo campo a acción ir ao anterior campo.
+
Image:PDM_EditText_12.jpg| O segundo campo a acción ir ao anterior campo.
−
Image:Android_2013_U2_08_EditText_12.jpg| O campo do mail, ten definida a acción '''Send''' que vai ser capturada en Java e realizar unha acción en consecuencia.  
+
Image:PDM_EditText_13.jpg| O campo do mail, ten definida a acción '''Send''' que vai ser capturada en Java e realizar unha acción en consecuencia.  
 
</gallery>
 
</gallery>
  
  
−
*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">
+
<br />
−
package com.example.u2_08_edittext;
 
  
−
import android.app.Activity;
+
===Foco===
−
import android.os.Bundle;
 
−
import android.view.KeyEvent;
 
−
import android.view.Menu;
 
−
import android.view.inputmethod.EditorInfo;
 
−
import android.widget.EditText;
 
−
import android.widget.TextView;
 
−
import android.widget.TextView.OnEditorActionListener;
 
  
−
public class U2_08_EditText extends Activity {
+
* Por defecto sempre vai ter o foco o primeiro edittext que se atope na ventá de ComponentTree no deseñador de layout.
  
−
@Override
+
* Cando cargamos un Layout podemos indicar cal vai ser o View por defecto ao que vai ir o foco saltándanos a regra anterior.
−
protected void onCreate(Bundle savedInstanceState) {
+
: Para iso temos que empregar a etiqueta: <requestFocus /> dentro do View ao que queramos que vaia o foco ao iniciar a activity.
−
super.onCreate(savedInstanceState);
 
−
setContentView(R.layout.activity_u2_08_edit_text);
 
−
 
−
 
−
final EditText etMail = (EditText) findViewById(R.id.et_mail);
 
  
−
etMail.setOnEditorActionListener(new OnEditorActionListener() {
+
<syntaxhighlight lang="xml" line highlight="12">
−
    @Override
+
    <EditText
−
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+
        android:id="@+id/evEmail"
−
        boolean handled = false;
+
        android:layout_width="0dp"
−
        if (actionId == EditorInfo.IME_ACTION_SEND) {
+
        android:layout_height="wrap_content"
−
            v.setText("Mensaxe enviada a: "+v.getText());
+
        android:layout_marginStart="16dp"
−
      //etMail.setText("Mensaxe enviada a: " + etMail.getText());       
+
        android:hint="@string/email_Alta_Empr"
−
            handled = true;
+
        android:inputType="textEmailAddress"
−
        }
+
        app:layout_constraintEnd_toStartOf="@+id/guideline3"
−
       
+
        app:layout_constraintHorizontal_bias="0.0"
−
        return handled;
+
        app:layout_constraintStart_toStartOf="parent"
−
    }
+
        app:layout_constraintTop_toBottomOf="@+id/evTfno">
−
});
+
        <requestFocus />
−
+
    </EditText>
−
}
 
  
−
@Override
+
</syntaxhighlight>
−
public boolean onCreateOptionsMenu(Menu menu) {
+
 
−
// Inflate the menu; this adds items to the action bar if it is present.
+
: Fixarse que dita etiqueta non está dentro da etiqueta <EditText  ....> como o resto de atributos e tivemos que quitar o fin de etiqueta (/) ao final para poñer unha etiqueta </EditText>
−
getMenuInflater().inflate(R.menu.u2_08__edit_text, menu);
+
 
−
return true;
+
* No caso de querer facelo por programación teríamos que chamar ao método requestFocus() da forma:
−
}
+
<syntaxhighlight lang="java" line highlight="7">
 +
    @Override
 +
    protected void onCreate(Bundle savedInstanceState) {
 +
        super.onCreate(savedInstanceState);
 +
        setContentView(R.layout.activity_operar_empregados);
 +
 
 +
        EditText email = findViewById(R.id.evEmail);
 +
        email.requestFocus();
 +
       
 +
    }
  
−
}
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
: Isto pode ser moi útil cando queiramos que non apareza o teclado virtual al lanzar a activity se esta ten algún control EditText. O que faríamos sería chamar ao requestFocus() de outro view diferente que non provoque a aparición do teclado, coma un botón ou unha lista.
  
−
*'''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()).
 
  
 +
* Para facer que o control pase dun view a outro facendo Tab no teclado virtual, teríamos que empregar no layout a propiedade nextFocusForward da forma: android:nextFocusForward="@id/etNome"
 +
* Para facer que o control pase dun view a outro premendo na frecha do teclado virtual, teríamos que empregar no layout a propiedade nextFocusDown da forma: android:nextFocusDown="@id/etNome"
  
−
*'''Liñas 24-29''': sobreescritura do método OnEditorAction() no que se reciben 3 parámetros:
+
==Accesibilidade==
−
**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.
 
  
 +
* Podemos activar el modo TalkBack [https://support.google.com/accessibility/android/answer/6007100 seguindo as instrucións deste enlace].
 +
: Dito modo vai 'ler' a descrición de cada elemento.
 +
 +
* Como norma xeral podemos dar as seguintes pautas:
 +
: Un <TextView> terá que ter o atributo 'android:hint' como se amosa no seguinte exemplo:
 +
<syntaxhighlight lang="xml" line highlight="9">
 +
    <EditText
 +
        android:id="@+id/etNome_UD03_01_Intents"
 +
        android:layout_width="wrap_content"
 +
        android:layout_height="wrap_content"
 +
        android:layout_marginStart="8dp"
 +
        android:layout_marginTop="8dp"
 +
        android:ems="10"
 +
        android:inputType="textPersonName"
 +
        android:hint="Nome a enviar"
 +
        app:layout_constraintStart_toEndOf="@+id/textView7"
 +
        app:layout_constraintTop_toTopOf="parent" />
 +
</syntaxhighlight>
  
−
*'''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''':
+
* No caso de que o EditText estea asociado a un TextView, podemos substituír dito atributo polo atributo: android:labelFor do TextView o cal indica cal é o EditText asociado ao TextView.
−
**Escribir a chamada ao método (ollo ; final incluído):   '''etMail.setOnEditorActionListener( );'''
+
<syntaxhighlight lang="xml" line highlight="9">
−
**Escribir '''new''' entre os paréntesis: '''etMail.setOnEditorActionListener(new  );'''
+
    <TextView
−
**Premer CTRL+Barra espaciadora e xa o sistema completa todo o demais.
+
        android:id="@+id/textView7"
−
**Logo só queda poñer o noso código no método a sobreescribir.
+
        android:layout_width="wrap_content"
 +
        android:layout_height="wrap_content"
 +
        android:layout_marginStart="8dp"
 +
        android:layout_marginTop="8dp"
 +
        android:text="Dime o teu nome:"
 +
        android:textSize="18sp"
 +
        android:labelFor="@id/etNome_UD03_01_Intents"
 +
        app:layout_constraintStart_toStartOf="parent"
 +
        app:layout_constraintTop_toTopOf="@+id/etNome_UD03_01_Intents" />
  
 +
    <EditText
 +
        android:id="@+id/etNome_UD03_01_Intents"
 +
        android:layout_width="wrap_content"
 +
        android:layout_height="wrap_content"
 +
        android:layout_marginStart="8dp"
 +
        android:layout_marginTop="8dp"
 +
        android:ems="10"
 +
        android:inputType="textPersonName"
 +
        app:layout_constraintStart_toEndOf="@+id/textView7"
 +
        app:layout_constraintTop_toTopOf="parent" />
 +
</syntaxhighlight>
  
−
*Lembrar premer '''SHIFT+CTRL+O''' para importar os paquetes correspondentes.
 
  
  
 +
* Para comprobar que non temos problemas de accesibilidade:
  
−
<gallery caption="Acción Send" widths="350" heights="300px" perrow="2">
+
<gallery caption="Comprobando a accesibilidade" widths="350" heights="300px" perrow="2">
−
Image:Android_2013_U2_08_EditText_12.jpg| Ao premer en '''Send'''
+
Image:PDM_Accesibilidad_1.jpg| Imos o menú do Android Studio e escollemos a opción '''Analyce''' =>'''Inspect Code'''.
−
Image:Android_2013_U2_08_EditText_13.jpg| O sistema captura o evento e envía unha mensaxe a o mesma caixa de texto.
+
Image:PDM_Accesibilidad_2.jpg| Indicamos se queremos analizar o proxecto completo ou a activity actual.
 +
Image:PDM_Accesibilidad_3.jpg| Se hai algún problema teremos que ir a sección de '''Lint''' e ver os erros que aparecen.
 
</gallery>
 
</gallery>
 +
 +
 +
<br />
 +
==Atributos a coñecer==
 +
 +
* Tedes a lista enteira de atributos en http://developer.android.com/reference/android/widget/EditText.html
 +
 +
* Dentro de este control tedes que coñecer e saber empregar os seguintes atributos:
 +
:* id
 +
:* layout_width, layout_height
 +
:* margin
 +
:* padding
 +
:* gravity
 +
:* contentDescription
 +
:* text
 +
:* hint
 +
:* inputType
 +
:* maxLines
 +
:* imeoptions
 +
:* textXXXX (Size, Color, Style, Alignment)
 +
:* fontFamily
 +
:* typeFace
 +
:* visibility
 +
:* ems
 +
:* maxLength
 +
 +
 +
<br />
 +
==Métodos mínimos a coñecer no manexo dos EditText´s==
 +
 +
:* Referenciar a un EditText có método findViewById.
 +
:* Recuperar o contido do texto.
 +
:* Cambiar o contido do texto, podendo empregar recursos gardados en /res/values.
 +
:* Engadir novo texto a un existente.
 +
:* Modificar propiedades básicas, como cor, tamaño, visibilidade,...(e os métodos getZZZZZ para obter os seus valores)
 +
:* Cambiar o foco a un view EditText concreto.
 +
 +
: Exemplos:
 +
::<syntaxhighlight lang="java" enclose="div" highlight="">
 +
        EditText et = findViewById(R.id.etvTextoEditText);          // Referenciamos a un EditText que estea na Activity.
 +
        String cadeaet = et.getText().toString();                  // Fixarse que getText() devolve un obxecto Editable, non un String.
 +
        et.setText("Cambiamos o texto directamente");              // Cambiamos o contido por unha cadea concreta
 +
        String textoRes = getResources().getString(R.string.app_name);
 +
        et.setText(textoRes + " texto que ven da BD");      // Se queremos concatenar texto dunha base de datos cun texto que poida ser traducido
 +
 +
        et.append(" engadimos novo texto");                // append para engadir
 +
 +
        et.setTextSize(20);                                // Axustar tamaño
 +
 +
        et.setTextColor(Color.BLUE);                        // Cambia a cor
 +
 +
        et.setVisibility(View.VISIBLE);                    // As constantes aparecen no Android Studio ao teclear. GONE fai que non ocupe espazo no Layout.
 +
 +
 +
        EditText et2 = findViewById(R.id.etvTextoEditText2);// Referenciamos a outro EditText que estea na Activity.
 +
        et2.requestFocus();                                // Cambiamos o foco para ese EditText   
 +
 +
 +
</syntaxhighlight>
 +
 +
  
  

Revisión actual del 19:33 14 nov 2020

Introdución

  • O control EditText serve para introducir e editar texto por parte do usuario dunha aplicación Android.
  • Este control é unha subclase da clase TextView que se viu anteriormente.

00 Part of Android View Hierarchy.png


  • A forma de engadir un EditText en XML nun layout é a través do compoñente: <EditText/>
  • Unha propiedade importante é: android:inputType
    • Permitirá que so se introduzan números, texto, passwords, teléfonos, etc.
    • Tamén indicará se o control é dunha soa liña ou multiliña.
    • Facer que non autocomplete as palabras, etc.
  • Ademais permiten copiar, cortar e pegar.

00 edittext-noextract.png

  • Cando se entra nun cadro de texto, nun dispositivo que non teña teclado físico conectado, abrirase en pantalla un teclado virtual (tamén chamado lixeiro/soft) que se adaptará á propiedade android:inputType como veremos a continuación.
  • Finalmente a tecla Enter no teclado virtual poder realizar distintas accións, ben por defecto ou ben explicitamente coa propiedade android:imeOptions (IME: Input Method Editor)




Casos prácticos

Lembrar que se estades a empregar as bibliotecas de compatibilidade (por defecto), a vosa activity derivará de AppCompactActivity e non de Activity.
Nos exemplos seguintes toda activity deriva de Activity, pero o normal é que empregedes AppCompactActivity (coidado ao copiar os exemplos).
Se non o temos creado antes, crea un paquete de nome UI como un subpaquete do teu paquete principal.
Dentro do paquete UI, crearemos un novo paquete de nome: EditTexto.



  • Dentro do paquete EditTexto crear unha nova 'Empty Activity' de nome: UD02_01_EditText de tipo Launcher e sen compatibilidade.
Modifica o arquivo AndroidManifiest.xml e engade unha label á activity como xa vimos na creación do proxecto base.


Distintos tipos de datos: a propiedade android:inputType

  • Máis información sobre todos os posibles valores de InputType neste enlace.


  • A imaxe amosa un AVD con distintos tipos de campos, e cunha lenda interior indicando que tipo de dato hai que introducir nese campo.

PDM EditText 1.jpg

  • O layout xml que define esa pantalla é o seguinte. Observar como sempre as liñas marcadas.
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <EditText
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:hint="Escribe un número enteiro"
11         android:inputType="numberSigned" />
12 
13     <EditText
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:hint="Escribe un número decimal"
17         android:inputType="numberSigned|numberDecimal" />
18 
19     <EditText
20         android:layout_width="match_parent"
21         android:layout_height="wrap_content"
22         android:hint="Escribe palabras...(saíra a 1ª letra en maísculas)"
23         android:inputType="textCapWords|textMultiLine" />
24 
25     <EditText
26         android:layout_width="match_parent"
27         android:layout_height="wrap_content"
28         android:hint="Enderezo e-mail. Esta línea sae por fóra da pantalla"
29         android:inputType="textEmailAddress" />
30 
31     <EditText
32         android:layout_width="match_parent"
33         android:layout_height="wrap_content"
34         android:hint="Escribe a clave."
35         android:inputType="textPassword" />
36 
37 </LinearLayout>
  • Propiedade android:hint: indica o texto que se vai amosar no control cando este está baleiro.
  • Propiedade android:inputType: indica o tipo de datos que se poden introducir no campo.
    • Se non se pon a propiedade, o campo acepta toda combinación de caracteres.
    • Pódense combinar os filtros facendo uso de "|".
  • Obviamente os valores dos Hints é mellor telos declarados en constantes en recursos XML.


  • 'NOTA Edición 2015: No caso de usar un AVD con API 21, o botón Next é substituído por ">", o botón Done (Feito) por unha marca de verificación.


Distintas accións da tecla "Enter": android:imeOptions

  • A tecla Enter no teclado virtual pode realizar unha serie de accións:
    • Por defecto:
      • o sistema determina se existe outro elemento ao que poida ir o foco, nese caso a función da tecla é Next.
      • Se non o atopa a acción da tecla é Done.
      • Salvo nalgúns inputType como por exemplo o multiliña.
    • Podemos asignar explicitamente que acción se desexa que se leve a cabo cada caixa de texto. Para iso está o atributo android:imeOptions.
      • Que dun campo vaia ao anterior, que envíe o texto, que busque o texto, etc. En referencias está un enlace ás posibles accións.
  • O seguinte XML vai e a mesma pantalla anterior, só que as accións da tecla Enter para algúns EditText foi cambiada. Observar as accións definidas nas liñas marcadas.
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <EditText
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:hint="Escribe un número enteiro"
11         android:imeOptions="actionDone"
12         android:inputType="numberSigned" />
13 
14     <EditText
15         android:layout_width="match_parent"
16         android:layout_height="wrap_content"
17         android:hint="Escribe un número decimal"
18         android:imeOptions="actionPrevious"
19         android:inputType="numberSigned|numberDecimal" />
20 
21     <EditText
22         android:layout_width="match_parent"
23         android:layout_height="wrap_content"
24         android:hint="Escribe palabras...(saíra a 1ª letra en maísculas)"
25         android:inputType="textCapWords|textMultiLine" />
26 
27     <EditText
28         android:id="@+id/et_mail"
29         android:layout_width="match_parent"
30         android:layout_height="wrap_content"
31         android:hint="Enderezo e-mail. Esta línea sae por fóra da pantalla"
32         android:imeOptions="actionSend"
33         android:inputType="textEmailAddress" />
34 
35     <EditText
36         android:layout_width="match_parent"
37         android:layout_height="wrap_content"
38         android:hint="Escribe a clave."
39         android:inputType="textPassword" />
40 
41 </LinearLayout>





Foco

  • Por defecto sempre vai ter o foco o primeiro edittext que se atope na ventá de ComponentTree no deseñador de layout.
  • Cando cargamos un Layout podemos indicar cal vai ser o View por defecto ao que vai ir o foco saltándanos a regra anterior.
Para iso temos que empregar a etiqueta: <requestFocus /> dentro do View ao que queramos que vaia o foco ao iniciar a activity.
 1     <EditText
 2         android:id="@+id/evEmail"
 3         android:layout_width="0dp"
 4         android:layout_height="wrap_content"
 5         android:layout_marginStart="16dp"
 6         android:hint="@string/email_Alta_Empr"
 7         android:inputType="textEmailAddress"
 8         app:layout_constraintEnd_toStartOf="@+id/guideline3"
 9         app:layout_constraintHorizontal_bias="0.0"
10         app:layout_constraintStart_toStartOf="parent"
11         app:layout_constraintTop_toBottomOf="@+id/evTfno">
12         <requestFocus />
13     </EditText>
Fixarse que dita etiqueta non está dentro da etiqueta <EditText ....> como o resto de atributos e tivemos que quitar o fin de etiqueta (/) ao final para poñer unha etiqueta </EditText>
  • No caso de querer facelo por programación teríamos que chamar ao método requestFocus() da forma:
1     @Override
2     protected void onCreate(Bundle savedInstanceState) {
3         super.onCreate(savedInstanceState);
4         setContentView(R.layout.activity_operar_empregados);
5 
6         EditText email = findViewById(R.id.evEmail);
7         email.requestFocus();
8         
9     }
Isto pode ser moi útil cando queiramos que non apareza o teclado virtual al lanzar a activity se esta ten algún control EditText. O que faríamos sería chamar ao requestFocus() de outro view diferente que non provoque a aparición do teclado, coma un botón ou unha lista.


  • Para facer que o control pase dun view a outro facendo Tab no teclado virtual, teríamos que empregar no layout a propiedade nextFocusForward da forma: android:nextFocusForward="@id/etNome"
  • Para facer que o control pase dun view a outro premendo na frecha do teclado virtual, teríamos que empregar no layout a propiedade nextFocusDown da forma: android:nextFocusDown="@id/etNome"

Accesibilidade

Dito modo vai 'ler' a descrición de cada elemento.
  • Como norma xeral podemos dar as seguintes pautas:
Un <TextView> terá que ter o atributo 'android:hint' como se amosa no seguinte exemplo:
 1     <EditText
 2         android:id="@+id/etNome_UD03_01_Intents"
 3         android:layout_width="wrap_content"
 4         android:layout_height="wrap_content"
 5         android:layout_marginStart="8dp"
 6         android:layout_marginTop="8dp"
 7         android:ems="10"
 8         android:inputType="textPersonName"
 9         android:hint="Nome a enviar"
10         app:layout_constraintStart_toEndOf="@+id/textView7"
11         app:layout_constraintTop_toTopOf="parent" />


  • No caso de que o EditText estea asociado a un TextView, podemos substituír dito atributo polo atributo: android:labelFor do TextView o cal indica cal é o EditText asociado ao TextView.
 1     <TextView
 2         android:id="@+id/textView7"
 3         android:layout_width="wrap_content"
 4         android:layout_height="wrap_content"
 5         android:layout_marginStart="8dp"
 6         android:layout_marginTop="8dp"
 7         android:text="Dime o teu nome:"
 8         android:textSize="18sp"
 9         android:labelFor="@id/etNome_UD03_01_Intents"
10         app:layout_constraintStart_toStartOf="parent"
11         app:layout_constraintTop_toTopOf="@+id/etNome_UD03_01_Intents" />
12 
13     <EditText
14         android:id="@+id/etNome_UD03_01_Intents"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:layout_marginStart="8dp"
18         android:layout_marginTop="8dp"
19         android:ems="10"
20         android:inputType="textPersonName"
21         app:layout_constraintStart_toEndOf="@+id/textView7"
22         app:layout_constraintTop_toTopOf="parent" />


  • Para comprobar que non temos problemas de accesibilidade:



Atributos a coñecer

  • Dentro de este control tedes que coñecer e saber empregar os seguintes atributos:
  • id
  • layout_width, layout_height
  • margin
  • padding
  • gravity
  • contentDescription
  • text
  • hint
  • inputType
  • maxLines
  • imeoptions
  • textXXXX (Size, Color, Style, Alignment)
  • fontFamily
  • typeFace
  • visibility
  • ems
  • maxLength



Métodos mínimos a coñecer no manexo dos EditText´s

  • Referenciar a un EditText có método findViewById.
  • Recuperar o contido do texto.
  • Cambiar o contido do texto, podendo empregar recursos gardados en /res/values.
  • Engadir novo texto a un existente.
  • Modificar propiedades básicas, como cor, tamaño, visibilidade,...(e os métodos getZZZZZ para obter os seus valores)
  • Cambiar o foco a un view EditText concreto.
Exemplos:
        EditText et = findViewById(R.id.etvTextoEditText);          // Referenciamos a un EditText que estea na Activity.
        String cadeaet = et.getText().toString();                   // Fixarse que getText() devolve un obxecto Editable, non un String.
        et.setText("Cambiamos o texto directamente");               // Cambiamos o contido por unha cadea concreta
        String textoRes = getResources().getString(R.string.app_name);
        et.setText(textoRes + " texto que ven da BD");      // Se queremos concatenar texto dunha base de datos cun texto que poida ser traducido

        et.append(" engadimos novo texto");                 // append para engadir

        et.setTextSize(20);                                 // Axustar tamaño

        et.setTextColor(Color.BLUE);                        // Cambia a cor

        et.setVisibility(View.VISIBLE);                     // As constantes aparecen no Android Studio ao teclear. GONE fai que non ocupe espazo no Layout.


        EditText et2 = findViewById(R.id.etvTextoEditText2);// Referenciamos a outro EditText que estea na Activity.
        et2.requestFocus();                                 // Cambiamos o foco para ese EditText





-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).