Como poner texto por defecto para un EditText

Objetivo:

Colocar un texto por defecto en un EditText.

Cuando creamos formularios, debemos dar la máxima información para que el usuario que los rellena no tenga dudas.

Una forma de hacerlo es utilizando los hints de los EditText. Con ello conseguimos proporcionar una pista para rellenar el campo. Este texto por defecto en el EditText será borrado cuando pulsemos en el mismo y empecemos a escribir.

Vemos un ejemplo sacado de la aplicación Cartelera de Cine, (disponible en Android Market) en el cual debemos introducir la ciudad para saber toda la información de los cines y películas disponibles. Se observa que se usa el texto por defecto para dar un ejemplo de lo que se debería introducir en el EditText, y que dicho texto aparecerá con un color gris claro para diferenciarse del texto que posteriormente escriba el usuario:

Como poner texto por defecto en EditText (1)Como poner texto por defecto en EditText (2)

 

Para usar el texto por defecto, deberemos colocar la propiedad hint en el EditText del fichero XML:

Código fuente XML:

[sourcecode language=”xml”]
android:hint="Cordoba (por ejemplo)"
[/sourcecode]

Como mostrar teclado numérico solamente

Objetivo:

Mostrar únicamente números en el teclado virtual.

Hay situaciones en las que el teclado que deseamos mostrar no necesita letras (por ejemplo, en campos donde se debe introducir nuestra edad).

En esas situaciones, si sólo dejamos los números, éstos serán más grandes, pulsándose con más facilidad por el usuario de nuestra aplicación.

Vemos un ejemplo en la aplicación Málaga en un Clic, disponible en Market Android, en la cual debemos introducir un número de parada de autobús:

Como mostrar teclado virtual numérico solamente, ejemplo Málaga en un Clic

Hay varias forma de hacerlo. En el ejemplo de la imagen, se pueden escribir también símbolos (* # +…). Para obtener este teclado, deberemos colocar la siguiente propiedad en el EditText del fichero XML:

Código fuente XML:

[sourcecode language=”xml”]
android:inputType="numberDecimal"
[/sourcecode]

Si solamente deseamos ver números, entonces las propiedades del EditText serían:

Código fuente XML:
[sourcecode language=”xml”]
android:inputType="phone"
android:digits="1234567890"
[/sourcecode]

Como ocultar teclado virtual automaticamente

Objetivo:

Ocultar el teclado virtual automáticamente.

Hay situaciones en las que el teclado no son una prioridad, por lo que podremos, utilizando un par de líneas de código Java, ocultarlo a placer.

Situar las siguientes líneas en el momento en que deseemos la ocultación. Si es al arrancar la Activity, deberá colocarse en el método onCreate:

Código fuente java:

[sourcecode language=”java”]
//Lineas para ocultar el teclado virtual (Hide keyboard)
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
[/sourcecode]

Como programar una rueda de espera ProgressDialog

Objetivo:

Vamos a aprender a crear un ProgressDialog; es decir, un mensaje de espera (junto con una rueda giratoria en este caso) mientras se realizan acciones en segundo plano.

Esto es ideal cuando deseamos que el usuario espere para mostrar estos datos, y al tardar algo de tiempo, deseamos advertirles que esperen.

La aplicación programada en este caso son dos Actividades. La primera llamará a la segunda, la cual debe procesar unos datos antes de mostarlos, y por tanto implementará el ProgressDialog.

Vemos primero una captura de pantalla de la aplicación que vamos a programar:

Programacion Android -ProgressDialog 1Programacion Android -ProgressDialog 2Programacion Android -ProgressDialog 3
     

Código fuente java (/src/Principal.java):

[sourcecode language=”java”]
package com.progressdialog;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class Principal extends Activity {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.principal);
}

public void onClick_ExampleApp(View v){
startActivity(new Intent(this, Ejemplo_con_rueda.class));
}
}
[/sourcecode]

Código fuente java (/src/Ejemplo_con_rueda.java):

[sourcecode language=”java”]
package com.progressdialog;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Ejemplo_con_rueda extends Activity {

//variables necesarias
private ProgressDialog pd = null;
private Object data = null;

private TextView texto;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ejemplo_con_rueda);

//asignamos el TextView para mostrar luego los datos procesados
this.texto = (TextView) findViewById(R.id.texto);

// Mostrar el ProgressDialog en este Thread
this.pd = ProgressDialog.show(this, "Procesando", "Espere unos segundos…", true, false);

// Se comienza la nueva Thread que descargará los datos necesarios
new DownloadTask().execute("Parametros que necesite el DownloadTask");
}

/**
* Muestra el texto resultado
* @param String textoAMostrar
*/
public void mostrarResultado(String textoAMostrar){
this.texto.setText(textoAMostrar);
}

/**
* Subclase privada que crea un hilo aparte para realizar
* las acciones que deseemos.
*/
private class DownloadTask extends AsyncTask {
protected String doInBackground(String… args) {
Log.i("Mi app", "Empezando hilo en segundo plano");

// Aqui se realizan las operaciones necesarias
// Como ejemplo, simulamos que se trabaja durante unos segundos con un for
for (int i=1;i }

return "Datos ya procesados (resultado)";
}

protected void onPostExecute(Object result) {
// Pasamos el resultado de los datos a la Acitvity principal
Ejemplo_con_rueda.this.mostrarResultado((String)result);
if (Ejemplo_con_rueda.this.pd != null) {
Ejemplo_con_rueda.this.pd.dismiss();
}
}
}
}
[/sourcecode]

Código fuente XML (/res/layout/principal.xml):

[sourcecode language=”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:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />

<Button android:id="@+id/button_ExampleApp" android:onClick="onClick_ExampleApp"
android:layout_gravity="center" android:layout_width="200dip"
android:layout_height="wrap_content" android:text="actividad 2" />
</LinearLayout>
[/sourcecode]

Código fuente XML (/res/layout/ejemplo_con_rueda.xml):

[sourcecode language=”xml”]
<?xml version="1.0" encoding="utf-8"?>
<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Datos no procesados aun"
android:id="@+id/texto" />

</LinearLayout>
[/sourcecode]

Descárgate el código aquí

Como reiniciar una Activity

Objetivo:

Forzar el reinicio de una Activity en un momento determinado.

En alguna ocasión podemos deseear que una Activity reinicie sus valores, comenzando por ejecutarse por el método onCreate, según el ciclo de vida de una aplicación Android.

Para ello usaremos una función simple  en Java, de forma que la llamaremos en el momento deseado. Sólo tendríamos que colocar una función dentro de nuestra Activity que necesitemos reinciar:

Código fuente java:

[sourcecode language=”java”]
//reinicia una Activity
public static void reiniciarActivity(Activity actividad){
Intent intent=new Intent();
intent.setClass(actividad, actividad.getClass());
//llamamos a la actividad
actividad.startActivity(intent);
//finalizamos la actividad actual
actividad.finish();
}
[/sourcecode]

Y haremos la llamada en el momento que queramos reinciar la Activity:

[sourcecode language=”java”]
//…
reiniciarActivity(this);
//..
[/sourcecode]