CLASE 02

Input Methods

Contenido

  • InputTypes

  • RadioButtons

  • Bars (Rating + Seek)

  • Dialogs

  • TextInputLayout

 

INPUT TYPES

InputType

Como su nombre lo indica el inputType determina el tipo de ingreso que le vamos a permitir al usuario junto con algunas características mas.

Esta propiedad ya la estuvimos probando un poco, cuando hacíamos que solo despliegue el teclado numerico, por ejemplo. Y simpre seteandolo de manera estática en el XML.

 

Ahora vamos a ver como cambiarlo dinámicamente, desde la clase.

InputType - Ver/Ocultar Pass

En algunas aplicaciones suele ser necesario que el ingreso del password esté oculto, pero a su vez, darle la posibilidad al usuario de mostrar la clave para corroborarla. Esto se consigue muy facilmente, cambiando de manera dinámica el inputType del campo de ingreso.

 

Para eso vamos a usar un CheckBox, y su listener de onCheckedChange que es parte de las CompoundViews

IME Options

IME significa Input Method Editor, y es lo que nos permite setear el comportamiento del botón de acción que la mayoria de los teclados (soft keyboard) tienen.

Estas son acciones como NEXT, DONE, GO, SEARCH, etc. Se pueden configurar cualquiera de ellas, siempre y cuando la caja de texto sea simple línea. Si es multi-línea la acción es siempre ENTER (para cambio de línea).

Además, si se van a usar la IME Options, si o si hay que setear el inputType de la caja de texto.

android:imeOptions="actionSearch"
android:inputType="text"

IME Options

Esta opción la seteamos desde el XML, y luego desde la clase debemos definir un Listener para las Acciones del Editor (EditorActionListener). Más allá de cuál sea la acción, el Listener es siempre el mismo, y dentro de él corroboramos que sea la acción particular que seteamos.

setOnEditorActionListener(new TextView.OnEditorActionListener()


actionId == EditorInfo.IME_ACTION_NEXT

Mostrar el sentido del boolean que retorna. El mejor ejemplo es el NEXT

AutoCompletar

Si queremos darle al usuario opciones para auto-completar lo que está escribiendo, debemos usar un EditText especial, llamado AutoCompleteTextView. Además necesitamos un array de Strings para especificar las opciones, y un Adaptador (al igual que en las ListView o RecyclerView) para "adaptar" la lista a la caja de texto.

String[] contactos = {"Jose", "Martin", "Maria", "Jorge", 
                      "Mariana", "Andres", "Antonia"};

ArrayAdapter<String> adapter =
        new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
        contactos);

autocomplete_txt.setAdapter(adapter);

AutoCompletar

Por defecto, la función de auto completar se dispara cuando hay 2 o más caracteres escritos.

Esto se puede modificar, y está regido por el atributo o propiedad Threshold.

 

Se puede setear tanto desde el XML, como desde el objeto, programáticamente.

RADIO BUTTONS

RadioButtons

Los RadioButtons, se utilizan en conjunto con los RadioGroups para dar opciones al usuario.

Un RadioGroup, agrupa RadioButtons, y como hereda de un LinearLayout, hay que setearle su orientación ya sea VERTICAL u HORIZONTAL.

 

Vamos a comenzar creando una nueva actividad, con un Layout con 3 opciones y un botón.

RadioButtons

Luego tomamos referencia al GRUPO y seteamos el Listener de CheckedChange (cambio en la opción chequeada). Y ahí dentro, al igual que como cuando se presiona la opción de un Menu, nos fijamos cual fue el ID seleccionado.

 

Del mismo modo, al presionar el Botón podemos obtener el ID del RadioButton seleccionado, si es que seleccionó alguno...

RadioButtons

Definiendo el Estillo

Si quisieramos, podemos alterar la forma en la que se ve un RadioButton. Para ello, vamos a trabajar sobre su propiedad background, y vamos a definir un drawable para cada uno de sus estados: Seleccionado o NoSeleccionado. A su vez, cada uno de ellos es otro drawable.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/radiobutton_presionado" 
          android:state_checked="true"/>
    <item android:drawable="@drawable/radiobutton_no_presionado" 
          android:state_checked="false"/>
</selector>

RadioButtons

Definiendo el Estillo

<?xml version="1.0" encoding="utf-8"?>

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <!-- Forma de cada vertice -->
    <corners
        android:bottomLeftRadius="0dp"
        android:topLeftRadius="0dp"
        android:topRightRadius="4dp"
        android:bottomRightRadius="4dp"/>


    <!-- Trazo -->
    <stroke
        android:width="1dp"
        android:color="@color/colorAccent"/>

    <!-- Relleno -->
    <solid
        android:color="@color/colorAccent"/>

</shape>

BARS

RATING BAR

La barra de Raiting, como su nombre lo indica nos permite darle la opción al usuario de definir un puntaje (rating) como método de ingreso.

Se utiliza principalmente a la hora de Rankear la App en el PlayStore, pero también puede usarse como un indicador de calidad de un proceso, valoración de predicción climatica, o para una encuesta, por ejemplo. 

RATING BAR

Comenzamos por agregar una a un Layout, y veamos su propiedades:

  • stepSize
  • numStars
  • layout_width

 

Tengan en cuenta el tamaño de cada estrella y el ancho de la pantalla y ojo si usan el width match_parent.

 

Luego agreguemos un Listener para RatingBarChange para capturar las modificaciones y un botón para setearlo

SEEKBAR

La SeekBar provee una interfaz al usuario para seleccionar un nivel o valor, entre un máximo y un mínimo. Hay que se cuidadoso al usarla, para que sea una buena experiencia para el usuario y no un problema:

  • Mucha amplitud entre máximo y mínimo
  • Paso muy pequeño

 

Personalmente, yo prefiero utilizar este elemento visual cuando el ajuste no requiere exactitud, como por ejemplo un termostato o el nivel de brillo de pantalla.

O sino para marcar un progreso de un video, por ejemplo

SEEKBAR

Una de las desventajas que tiene es que no puede setearse un valor mínimo y este siempre es 0. Y el incremento es siempre entero y unitario.

(Se puede, por programa emular un mínimo mayor a 0 y un incremento mulplicativo)

 

Y una de las cosas interesantes que tiene, es que se pueden marcar 2 progresos simultaneamente. Por ejempo en un streaming, el progreso de reproducción y el de descarga. Este se llama secondaryProgress.

DIALOGS

DIALOGS

Los Dialogs vienen en diferentes formatos y para diferentes acciones. Son los mensajes emergentes que solicitan la acción de usuario, ya sea para:

  • Confirmar una Operación
  • Solicitar ingreso de Datos
  • Selección de Fecha
  • Selección de Hora

 

La idea de los Dialogos es evitar iniciar una nueva actividad (nueva pantalla) y no marear al usuario con la navegabilidad sobre la App, y mantener el flujo.

ALERT DIALOGS

Las forma más sencilla de construir un dialog para alertar al usuario es usando Builder que nos provee Android para tal fin

new AlertDialog.Builder(DialogsActivity.this)
    .setTitle("¿Seguro que desea formatear el Telefono?")
    .setMessage("Se perderan todas sus fotos y mensajes y esta operación no podrá deshacerse")
    .setPositiveButton("Formatear", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int whichButton) {
        }
    })
    .setNegativeButton("Mejor No", null)
    .show();

USER INPUT DIALOGS

Si queremos solicitar el ingreso de datos de usuario, creamos un AlertDialog como el ejemplo anterior y añadimos un EditText para que pueda ingresar el dato.

final EditText userInput = new EditText(DialogsActivity.this);
userInput.setInputType(InputType.TYPE_CLASS_TEXT);
dialogBuilder.setView(userInput);

TIME PICKER DIALOGS

La estructura del constructor de un selector de HORA es

new TimePickerDialog(
    parentActivity,
    new TimePickerDialog.OnTimeSetListener(){},
    defaultHora,
    defaultMin,
    24hsModeOn)

DATE PICKER DIALOGS

Analogamente al anteriro, la estructura del constructor de un selector de FECHA es

new DatePickerDialog(
    parentActivity,
    new DatePickerDialog.OnDateSetListener(){},
    defaultAño,
    defaultMes,
    defaultDia)

TEXT INPUT LAYOUT

TEXT INPUT LAYOUT

Es un nuevo elemento del Material Design para darle más dinamismo al ingreso de datos.

Es una "capa" que se agrega alrededor de un EditText para potenciarlo

<android.support.design.widget.TextInputLayout
    android:id="@+id/tilUsername"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/edtUsername"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textCapWords"
        android:hint="Nombre de Usuario" />
</android.support.design.widget.TextInputLayout>

Gracias!

No dejen de consultar cualquier duda que surja

sebasira@gmail.com

www.sebasira.com.ar

Android Experto - Clase 02

By Ing. Sebastian M. Irazabal

Android Experto - Clase 02

  • 549