martes, 9 de agosto de 2011

Elementos básicos del interface de usuario – EditText - Basic elements of the user interface


EditText realmente es una subclase de TextView, es decir, es como si fuera un TextView pero con contenido editable, por lo tanto comparte sus atributos xml y sus métodos asociados en Java.

Definición en xml :
<EditText 
    android:id="@+id/EditTxt1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

Y en Java:
public class AndroideNovatoActivity extends Activity {
    /** Called when the activity is first created. */
   
      EditText editText1; // Definimos variable EditText

      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Cargamos la variable a través del ID
        editText1 = (EditText) findViewById (R.id.EditTxt1);
      }
}
Todos los atributos y métodos vistos en la entrada anterior para TextView son aplicables para los EditText, pero aquí encontramos otros que pueden sernos muy útiles y en los que vamos a profundizar. Veamos el siguiente ejemplo:

Strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="TxtView1">Contacto</string>
    <string name="EditTxt1">Nombre</string>
    <string name="EditTxt2">Dirección</string>   
    <string name="EditTxt3">Teléfono</string>  
    <string name="app_name">Hola Androide Novato</string>
</resources>

Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
      <TextView 
          android:id="@+id/TxtView1"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="@string/TxtView1"
          android:textSize="20dip"
          android:textStyle="bold"
          />
      <EditText 
          android:id="@+id/EditTxt1"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:hint="@string/EditTxt1"
          />
      <EditText 
          android:id="@+id/EditTxt2"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:hint="@string/EditTxt2"
          />     
      <EditText 
          android:id="@+id/EditTxt3"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:hint="@string/EditTxt3"
          />                   
</LinearLayout>

Resultado:
Como vemos el atributo android:hint permite mostrar un texto en el campo editable que sirve de guia para indicar el contenido que debemos introducir.

Desde Java podemos utilizar métodos para manipular los atributos del EditText, por ejemplo:
public class AndroideNovatoActivity extends Activity {
    /** Called when the activity is first created. */
   
      EditText editText2; // Definimos variable EditText

      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Cargamos la variable a través del ID
        editText2 = (EditText) findViewById (R.id.EditTxt2);
       
        // Deshabilitamos la entrada del EditText
        editText2.setEnabled(false);
    }
} 

Con el método setEnabled podemos habilitar (true) o deshabilitar (false) la entrada de datos en el EditText:
 
Otro método interesante es setVisibility (se corresponde con el atributo xml android:visibility). Con él podemos hacer que desaparezca del Layout un elemento cualquiera:

editText2.setVisibility(View.INVISIBLE);

 
Aunque el hueco permanece en el Layout. Con el valor GONE lo hacemos desaparecer totalmente, haciendo que los elementos situados por debajo ocupen su lugar:

editText2.setVisibility(View.GONE);

 
Otras posibilidades muy interesantes son las que nos permiten filtrar el contenido de EditText. Por ejemplo desde xml podemos utilizar el atributo: android:inputType que puede contener múltiples valores  dependiendo del tipo de dato que estemos capturando:
  • android:inputType=”textPassword” : Se visualizan asteriscos en el lugar de cada carácter.
  • android:inputType=”textCapWords” : Pone en mayúsculas las primeras letras de cada palabra (Capitalize)
  • android:inputType=”number” : Sólo admite números.
  • android:inputType=”phone” : Muestra el teclado numérico.



Los métodos asociados por si queremos modificar el contenido de un EditText dinámicamente desde Java son algo más complejos:

Para contraseñas: setTransformationMethod(PasswordTransformationMethod.getInstance());

Control entrada numérica:
setKeyListener(DigitsKeyListener.getInstance());

Control campo teléfono:
setKeyListener(DialerKeyListener.getInstance());

Por supuesto, si quereis encontrar mas información podeis visitar el API de Android. 

Hasta pronto..








5 comentarios:

  1. Woow.. Muchas Grax..
    Voy a probar que tal...

    Soy novata en Android
    pero si me defiendo en Java..
    Asi que le entendi muy bien...
    XD

    ResponderEliminar
  2. Hola quisiera saber esta pregunta sobre android eclipse ¿Cómo referenciamos las propiedades de un método sin escribirlo como el OnClic o el setText?

    ResponderEliminar
  3. Para que la primera letra de un EditText sea mayúscula, habría que ponerlo asi: android:capitalize="sentences"

    ResponderEliminar
  4. ¿Como hacer que el usuario introduzca la fecha en formato yyy/mm/dd; para luego obtener cada valor por separado?

    ResponderEliminar
    Respuestas
    1. Hay de muchas formas posibles, puedes editar el editText desde la clase, puedes agregar un calendario a un boton y lo que te regrese el calendario mostrarlo en un editText, ya lo solucionaste?

      Eliminar