Tutoriales , mini-
tutoriales y how-tos de Android
WWW.VICTORPASCUAL.ES
Los tutoriales, mini-tutoriales, trucos y How-tos recopilados de la web www.victorpascual.es
pág. 1
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Licencia
Tutoriales y How-tos de Android por Víctor J Pascual se encuentra bajo una Licencia Creative Commons
Atribución-NoComercial 3.0 Unported.Esta licencia significa que puedes modificar la obra siempre y cuando nombres al autor (Víctor J Pascual) y no la uses para fines comerciales.
→ Contacto
Web: http://www.victorpascual.es Email: [email protected]
→ Versión
Versión del documento actual: 1.0 Fecha de última edición: 25 Octubre 2012
pág. 2
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Índice
Cómo abrir una página web desde una aplicación Android → pag 4
Meter publicidad a las aplicaciones Android: Sistema de anuncios AdMob → pag 5
Solucionar el problema “ Error generating final archive: Debug certificate expired... ” → pag 9 Regenerar el archivo R.java→ pag 10
Traducir una aplicación Android usando Strings.xml→ pag 11 Cómo eliminar la barra con el nombre de la aplicación→ pag 12 Cómo hacer transiciones entre Activitys→ pag 13
Pasar datos entre Activitys, metiendo datos a Intents→ pag 14 Limitar el número de caracteres de un EditText→ pag 15
Cómo hacer que no se gire la pantalla de mi Android de modo Vertical o Portrait a modo Horizontal o Landscape→ pag 16
Enviar mensajes usando Intent.ACTION_SEND→ pag 17 Enviar emails desde aplicaciones Android→ pag 18 Cómo cerrar una aplicación desde el código→ pag 19
Evitar que se cuelgue el emulador de Android en Eclipse→ pag 19 Cómo hacer que se conecte a Internet mi aplicación→ pag 20 Cómo habilitar o deshabilitar un botón en Android→ pag 20 Cómo llamar por teléfono desde una aplicación Android→ pag 21
Quitar el teclado al entrar en una aplicación donde hay un formulario→ pag 21 Más cosas en la siguiente versión del PDF! Estate atent@
pág. 3
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Cómo abrir una página web desde una aplicación Android
Como ya bien sabrás, in Intent sirve para invocar componentes como puede ser un Activity, o por ejemplo también una página web o URI.
Este es el código que necesitas para invocar un Intent que te abra una página web que desees:
1 2 3
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.es"));
activity.startActivity(intent);
Es muy sencillo. Creamos un Intent con el tipo de Intent ACTION_VIEW. Después le añadimos los datos al Intent donde va nuestra dirección web o URI (parseada en formato Uri evidentemente). Por último llamas a que comience el Intent y… ¡hecho!
Recuerda que los Intent puedes usarlos dentro de tus Activity cuando pulsa el usuario por ejemplo un botón, o al lanzarse un evento como puede ser una pulsación de tecla.
¿Tienes dudas? Usa los comentarios y te contestaré con la mayor rapidez posible.
Enlace al artículo en Internet: http://www.victorpascual.es/2012/08/21/como-abrir-una- pagina-web-desde-una-aplicacion-android/
pág. 4
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Meter publicidad a las aplicaciones de Android: Sistema de anuncios AdMob
Primeramente. ¿Qué es AdMob? Es una plataforma de gestión de anuncios en la que tienes que registrarte lo primero de todo y donde vas a poder gestionar tus campañas de anuncios para tus aplicaciones Android.
Aquí vamos a ver desde el comienzo y hasta el final cómo se ponen anuncios en una aplicación Android.
Primer paso: registrarse en AdMob
Tienes que ir a http://es.admob.com y registrarte. Ahí vas a obtener datos necesarios para poder poner los anuncios en la aplicación.
Segundo paso: descargar el SDK de AdMob
Necesitamos descargar el SDK de AdMob para incluirlo en nuestra aplicación. En mi caso, tras varios tutoriales externos no conseguía meter los anuncios en la aplicación. Esto era porque no venía en ninguno de ellos este paso: meter el SDK COPIÁNDOLO tal cual a la carpeta /libs del proyecto. Si no tienes esa carpeta creada por lo que sea, créala y copia y pega dentro de esa carpeta el SDK de AdMob. Además de esto, hay que hacer lo típico que es linkar la librería en eclipse. Esto se hace en Proyecto -> Propiedades -> Ruta de Java Build (o Java Build Path). Ahí te vas a la pestaña librerías (Libraries) y pulsas en Añadir JAR externo (Add External JARs…). Lo añades y listo.
Tras estos pasos tienes tu aplicación con las herramientas listas para empezar a usar las funciones y librerías de AdMob. Sin este paso bien hecho, NO FUNCIONA! así es que hazlo bien!
pág. 5
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.esTercer paso: empieza el cachondeo, modificamos el AndroidManifest.xml
Hay que hacer dos cosas aquí:
Primero tienes que añadir este código dentro de la etiqueta application como se hace con cualquier Activity normalmente:
1 2
<activity android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|
uiMode|screenSize|smallestScreenSize"/>
Después tienes que añadirle permisos para que funcionen los anuncios:
1 2
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Cuarto paso: crear el anuncio en el layout
Ahora tenemos que crear el espacio donde irá el anuncio en sí.
1 2 3 4 5 6
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#000000"
android:id="@+id/anuncio"></LinearLayout>
Como puedes ver es un simple LinearLayout al que le he dado un identificador anuncio para poder luego trabajar con él en el código java de la aplicación. Le he dado una altura de 60dp. Decir que hay varios formatos de anuncio. Yo elegí ese. Tú quizás quieras otro formato. Eso ya es personal de cada uno.
Quinto paso: darle funcionalidad en el java de la aplicación
Una vez que tenemos los permisos de acceso a Internet y definido el espacio donde irá el anuncio, podemos pasar a rellenar los anuncios. Esto se hace en el archivo java de la actividad donde salen los anuncios. Si son varias, pues tendrás que hacerlos en todos los java que sea necesario.
Lo primero que tienes que hacer es añadir los import necesarios para que podamos usar las funciones:
1 2 3
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
pág. 6
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.esDespués, dentro del Activity tienes que declarar un AdView:
1 private AdView adView;
Y por último lo más importante, el código donde pedimos anuncios:
1 2 3 4 5 6 7 8 9 10
// Crear la adView
adView = new AdView(this, AdSize.BANNER, "a150xx222xxxxx");
LinearLayout layout = (LinearLayout)findViewById(R.id.anuncio);
// Añadirle la adView
layout.addView(adView);
// Iniciar una solicitud genérica para cargarla con un anuncio
adView.loadAd(new AdRequest());
Primero creamos el adView. IMPORTANTE!! el identificador que ves es el que tienes que sacar de la página de adMob que será personal.
Después hacemos referencia a nuestro layout anuncio. Le añadimos el adView a nuestro layout anuncio. Así ya sabe la aplicación donde tiene que visualizar los anuncios.
Por último llamamos a loadAd para que haga peticiones de anuncios. Y ya está.
Sexto paso y último: disfrutar de lo hecho
Ejecuta la aplicación y a los minutos siguientes verás cómo aparecen los anuncios por arte de magia en tu aplicación. Ojo! tendrás que jugar en AdMob con las campañas…etc… porque si no no aparece nada. Eso ya lo dejo en tus manos.
Un consejillo que os puede servir: si tienes varias aplicaciones puedes hacer campañas de autopublicidad de tus aplicaciones poniendo anuncios de tus aplicaciones en otras aplicaciones tuyas. Ejemplo: una app tuya es muy famosa y quieres lanzaar otra. Puedes hacer una campaña de publicidad de tu aplicación nueva y que aparezca solo en la vieja aplicación. Es tan sólo una idea para que veas el potencial que tiene la publicidad en las aplicaciones móviles.
Espero sinceramente que te sirva de ayuda este post. Cualquier duda escribe en comentarios o en contacto.
Ejemplo de aplicación con anuncios AdMob:
pág. 7
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.esEnlace a la aplicación Todocarreras.es en Google Play.
pág. 8
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Solucionar el problema “ Error generating final archive:
Debug Certificate expired... ”
Cuando os salga ese mensaje, no os preocupéis. Se debe a que hace tiempo que no abríais esa aplicación y el certificado de la misma ha expirado, se ha gastado.
Para poder continuar con el desarrollo normal tenéis que borrar el certificado antiguo. Ese archivo se llama debug.keystore y está dentro de C:/ -> Documents and Settins -> Usuario vuestro -
> .android
En esa carpeta encontraréis el archivo. Borradlo y volved a runear o compilar la aplicación y tachán, certificado nuevecito y adiós al problema.
Esto sirve para Windows.
Para Linux es: /home/MI_USUARIO/.android/debug.keystore Para MAC: $HOME/.android/debug.keystore
Espero que os sirva de ayuda.
pág. 9
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Regenerar el archivo R.java
Una de las cosas que da muchos quebraderos de cabeza a la hora de generar y ejecutar un proyecto Android es el famoso archivo R.java. Es un archivo que se autogenera por la aplicación, en mi caso, Eclipse, y que contiene las posiciones en memoria de las variables de nuestro proyecto.
A veces, si cambias nombres de archivos, o nombres de elementos string o cosas así, al ejecutar te salta el DEBUG y la aplicación digamos que “falla”. Para solucionar el problema es tan sencillo como parar la máquina virtual, es decir, cerrarla, y suprimir el archivo R.java. De repente verás como se crea de nuevo al instante automáticamente.
Solución B
Si no funciona eso, cosa que sería rara, puedes también hacer clic con el botón derecho en el proyecto –> Android tools –> Fix project
pág. 10
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Traducir una aplicación Android usando Strings.xml
Cuando desarrollamos en Android las aplicaciones, es normal que a veces nos surja la necesidad de traducir nuestra aplicación a otros idiomas. ¿Cómo se hace esto? Veamos:
Normalmente las aplicaciones llevan un archivo dentro de la carpeta res -> values que se llama strings.xml. Para traducir la aplicación a otro idioma hay que crear una carpeta llamada values más un guión más el código del idioma. Por ejemplo: para el inglés es values-en. Dentro de esa carpeta meteremos una copia del strings.xml original pero con los campos cambiados por las traducciones.
El propio móvil, al ejecutar la aplicación comprueba el idioma predeterminado y cargará el strings.xml que corresponda.
¿Y de dónde saco los códigos del idioma?
Entra en esta web, y los códigos son los que aparecen en la segunda columna empezando por la izquierda.
pág. 11
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Cómo eliminar la barra con el nombre de la aplicación
Como ya os habrá pasado si estáis leyendo esto, os habréis preguntado cómo se quita la famosa barra azul con el nombre de la aplicación en Android. Es muy sencillo.
Simplemente tendréis que añadir al Activity principal de la aplicación, el siguiente código dentro del método onCreate():
1
requestWindowFeature(Window.FEATURE_NO_TITLE);
De esa forma quedará vuestro método onCreate de la siguiente forma:
1 2 3 4 5
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
}
IMPORTANTE: debes colocarlo en todas y cada una de las activity porque si no sólo te la eliminará de aquella activity donde la hayas puesto.
OJO! siempre delante el Request del SetContentView porque de lo contrario escupirá una excepción/
error.
pág. 12
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Cómo hacer transiciones entre Activitys
Cuando estamos desarrollando y creando nuestra aplicación, el diseño cuenta bastante ya que es lo que entra por los ojos del usuario. Una de las cosas que dan “vidilla” a nuestra aplicación son las transiciones entre pantallas o Activity. ¿Cómo se hacen?
Para realizarlas tenemos que usar la función overridePendingTransition( referencia del Developer de Android ) la cual es llamada justo tras la función startActivity o finish(). Lo que hace es llamar a un recurso de animación o XML preparado para ello para la Activity, y otro para la entrante. De esa forma se construye la animación. Un ejemplo de llamada sería:
1
overridePendingTransition(R.anim.entrada, R.anim.salida);
Esa línea lo que hace es llamar con la función overridePendingTransition a dos XML alojados en la carpetares/anim. Esto último es importantísimo, ya que si no están alojados ahí no podrá generarse bien el archivo R.java dando problemas.
Y os preguntaréis…¿y cómo construyo un XML de tipo animador o animation? Es sencillo. Veamos R.anim.entrada:
1 2 3 4 5 6
<?xml version="1.0" encoding="utf-8"?>
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="100%p" android:toYDelta="0%p"
android:duration="@android:integer/config_longAnimTime"/>
</set>
Ahora veamos R.anim.salida:
1 2 3 4 5 6
<?xml version="1.0" encoding="utf-8"?>
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0" android:toYDelta="-100%p"
android:duration="@android:integer/config_longAnimTime" />
</
¿Cómo personalizar nuestra animación? Para ver las posibilidades que tiene tenemos que acudir al Animation Resources del Developer de Android donde vienen definidos los parámetros para poder usar en nuestras animaciones.
Como veis es tan sencillo como crear los dos XML con las animaciones y después llamar a la función que las activa.
pág. 13
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Pasar datos entre Activitys, metiendo datos a Intents
A veces es necesario pasar datos entre Activitys de la aplicación. Esto se hace “rellenando” con datos el Intent que las comunica.
Se da por hecho que conoces lo que es un Intent (si no fuera así puedes mirar la documentación de Android que es muy buena en ese sentido o cotillear ejemplos online para entender el funcionamiento). Para añadirle datos a un Intent se usa la función putExtra la cual añade una variable y un valor de la misma al Intent.
Después se recupera en la Activity destino creando un Bundle al que le metemos los datos del Intent gracias a getIntent().getExtras(). Una vez relleno el bundle, para recuperar una variable concreta se hacenombrebundle.getString(“nombredevariable”);
Veamos el código:
En la Activity que envía datos se pone dentro por ejemplo de un OnClick de un botón…
1 2 3
Intent i=new Intent(this,ActivityAlaQueEnvias.class);
i.putExtra("nombreVariable","valor");
startActivity(i);
Y en el Activity destino recuperas los datos así:
1 2 3 4
Bundle extras = getIntent().getExtras();
if(extras !=null) {
variable = extras.getString("nombreDeVariable");
}
Con esos trocitos de código podéis pasar datos entre Activitys.
pág. 14
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Limitar el número de caracteres de un EditText
A veces, cuando creamos formularios, es necesario limitar el número de caracteres a introducir en un EditText por parte del usuario.
Para ello se utiliza el atributo android:maxLength dándole el valor del número de caracteres que queremos que permita. Esto se hace en elxml del layout que corresponda.
Ejemplo de un campo EditText con límite de 2 caracteres:
1
android:maxLength="2"
Otra cosa muy sencilla pero muy práctica a la hora de desarrollar formularios en Android.
¡Suerte con vuestras apps!
pág. 15
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Cómo hacer que no se gire la pantalla de mi Android de modo Vertical o Portrait a modo Horizontal o Landscape
Seguramente os habrá surgido una pequeña duda respecto a la orientación del teléfono, el típico gesto en el que giramos el móvil del modo vertical o Portrait, al modo horizontal o Landscape.
Pues bien, simplemente con pegar esta línea de código que viene a continuación dentro del método OnCreate de vuestra activity.
1
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
NOTA: Si queréis que vaya en todas las Activity, tendréis que pegarlo en todos y cada uno de los métodos OnCreate de dichas Activity.
Si tienes alguna duda y quieres que te ayude, pregúntame.
pág. 16
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Enviar mensajes usando Intent.ACTION_SEND
Una de las cosas buenas que tienen las aplicaciones móviles es la posibilidad de compartir viralmente información. En Android, una de las formas de hacerlo es usando Intents que llaman a funciones nativas del Sistema Operativo Android que interactúa con el móvil como puede ser llamar (ACTION_CALL) o otras cosas como ver webs, etc…
La que nos ocupa es la ACTION_SEND que es un tipo de Intent que nos permite abrir un cuadro de selección de aplicaciones donde compartir un texto, imagen o lo que queramos desde nuestra aplicación hacia “afuera”, hacia otras aplicaciones del móvil.
No voy a poner ejemplos de código porque creo que es mejor que vayas directamente a la referencia del tema en Android developers: http://developer.android.com/intl/es/training/sharing/send.html. En esa referencia se tocan las cosas relacionadas con envío de datos de tu aplicación hacia otras.
Simplemente te copio aquí un código super útil que se usa para ello que es el que permite enviar texto:
1 2 3 4 5
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);
pág. 17
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Enviar emails desde aplicaciones Android
Aquí tenéis el snippet para enviar emails en Android:
1 2 3 4 5 6 7 8 9 10 11
Button sendBtn = (Button) findViewById(R.id.send_btn_id);
sendBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822") ; i.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
i.putExtra(Intent.EXTRA_SUBJECT,"asunto del mensaje");
i.putExtra(Intent.EXTRA_TEXT,"cuerpo del mensaje");
startActivity(Intent.createChooser(i, "Seleccionar aplicación."));
} });
COMENTARIOS AL CÓDIGO
Aunque no hay mucho que añadir porque es poquito código, ahí van unos comentarios:
Primeramente es necesario crear el botón (tipo Button) y referenciarlo en este caso a un botón definido en un layout que se llama send_btn_id. Ya sabéis que para referenciarlo siempre usamos la misma estructura: usamos la función findViewById y entre paréntesis la referencia al elemento, que en este caso es R.id.send_btn_id.
Una vez creado el botón, le añadimos el listener con el evento onClickdentro para que detecte los eventos Click del usuario. Dentro del eventoonClick definiremos un Intent con parámetro ACTION_SEND. Al Intent le pasaremos parámetros como EXTRA_EMAIL (para darle el email),EXTRA_SUBJECT (para darle el asunto del mensaje), EXTRA_TEXT (para darle el cuerpo del mensaje), etc…
Una vez creado el Intent, lo que se hace es comenzar una nueva actividad con la función startActivity y le pasamos como parámetro uncreateChooser (que crea una ventana flotante de elección de aplicaciones) con el texto que queramos que salga en esa ventana flotante.
De esta forma ya tenéis el código para enviar un mail desde una aplicación de Android, usando las aplicaciones nativas de Android (Gmail, Mail, etc…)
pág. 18
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Cómo cerrar una aplicación desde el código
Siempre surge la duda de cómo cerrar una aplicación en Android.
Pues es tan sencillo como poner dentro del evento onClick del listener de un botón por ejemplo:
1
finish();
Con esa función cierras la aplicación. Útil, ¿verdad?
→ Evitar que se cuelgue el emulador de Android en Eclipse
Si se os queda colgado el emulador de Eclipse para Android es posible que se deba a que le dais a Run proyecto antes de lanzar el emulador. Los pasos correctos a seguir para evitar el cuelgue son:
1.
Comenzar Eclipse2.
Window -> AVD Manager3.
Lanzar el emulador correspondiente4.
Ahora sí, “runear” o hacer Run en la aplicación que queramosEn ese caso ya no se os colgará nunca más el emulador, os evitará muchos quebraderos de cabeza y tiempo perdido.
pág. 19
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Cómo hacer que se conecte a Internet mi aplicación
Algo tan sencillo como poder leer un XML de internet o conectar con una base de datos, o simplemente cargar una imagen en nuestra aplicación requiere como es lógico de conectarse a Internet.
¿Y cómo hago que mi aplicación se pueda conectar a Internet? Muy sencillo. En nuestro archivo Manifest de la aplicación tenemos que añadir la siguiente línea:
<uses-permission android:name =“android.permission.INTERNET”></uses-permission>
Con esa línea dentro del Manifest de la aplicación podrás conectarte a Internet sin problemas.
Si te ha gustado esta solución, compártela en twitter o facebook. Gracias!
→ Cómo habilitar o deshabilitar un botón en Android
Vamos con algo muy sencillo pero muy útil a veces en las aplicaciones Android: cómo habilitar o deshabilitar botones Android.
Puedes hacerlo primero vía xml del layout, usando el atributo clickable y dándole el valor inicial que desees. Pero lo importante es a la hora de ejecutar la aplicación, en el momento que la usa el usuario, hay que trabajarlo con eventos. Dentro del evento onClick típico que se usa en los Button de Android tienes que utilizar el método setEnabled.
Código:
1
miBoton.setEnabled(false);
Con eso harás que si estaba el botón activo pase a estar desactivado. Espero que te sirva y cualquier duda ya sabes, en comentarios.
pág. 20
Tutoriales , mini-tutoriales y how-tos de Android // www.victorpascual.es→ Cómo llamar por teléfono desde una aplicación Android
Puede que necesites realizar una llamada a un teléfono desde una aplicación Android. Esto se hace usando los eventos y llamando a un Intent con la acción ACTION_CALL.
Veamos un ejemplo:
1 2 3 4 5
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:numerodetelefono"));
activity.startActivity(intent);
Es muy sencillo. Primero creamos el Intent con la acción ACTION_CALL. Después le pasamos el dato necesario que es el teléfono al que quieres llamar (puede ser fijo, una variable o lo que necesites…). Y por último se llama a que comience con startActivity.
También hace falta darle permisos de llamada. Esto se hace en elAndroidManifest.xml donde le meteremos la línea:
1
<uses-permission android:name="android.permission.CALL_PHONE"></uses- permission>
Simplemente decir que se suele llamar desde un Button por ejemplo. Eso ya depende de la imaginación. Lógicamente necesita de un evento para ser lanzado…
→ Cómo quitar el teclado al entrar en una aplicación donde hay un formulario
Seguramente te habrá pasado que al entrar a una Activity con un formulario dentro, automáticamente puede aparecerte el teclado de Android. Es algo bastante…cutre ya que afecta a la usabilidad de la aplicación. Normalmente hay que guiar al usuario con instrucciones antes de rellenar el formulario.
¿Y cómo se hace?
En el archivo AndroidManifest.xml, dentro de la actividad correspondiente hay que añadir el atributo windowSoftInputMode.
Veamos cómo quedaría:
1 2