Sunteți pe pagina 1din 29

Entorno Android

Curso Certificado en CREACIÓN DE


APLICACIONES MÓVILES.

APPS DESIGN_Curso Online


Año de realización 2019

PROFESOR/A
Alberto Luengo

Esta publicación está bajo licencia Creative


Commons Reconocimiento, Nocomercial, Compartirigual, (by-
nc-sa). Usted puede usar, copiar y difundir este documento o
parte del mismo siempre y cuando se mencione su origen, no se
use de forma comercial y no se modifique su licencia. Más
información: http://creativecommons.org/licenses/by-nc-sa/3.0/
2

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

INDICE:
1. Introducción
a. Android: Sistema Operativo
b. Dispositivos con Android: Móviles, Tablets, Android TV, Android Auto
c. Ultima versión, 10 (Q)
d. 75% de Cuota de mercado
e. Lenguajes que intervienen en Android
f. Kotlin básico
g. Vistas y componentes
h. Navegación

2. Lenguajes de programación en Android


a. Java (1995)
b. C: NDK +rendimiento +complejidad +hardware
c. Kotlin (2010) Legible y seguro
d. XML: Recursos, layouts
e. Gradle (DSL basado en Groovy): scripts configuración

3. Android Studio: IDE principal


a. Creado por JetBrains
b. Proyect
i. Activity
ii. Layout
c. Run

4. Introducción a Kotlin
a. Variables y constantes
b. Inferir tipos
c. Arrays
d. Opcionales (Nullsafe)
e. Conversión de Tipos

5. Programación básica en Kotlin


a. Condicionales
i. If else
ii. When
b. Clases, Objetos y Funciones
c. Bucles
d. Ordenación y Filtros con Arrays

EOI Escuela de Organización Industrial http://www.eoi.es


3

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

6. Primera app para Android


a. Ciclo de vida Activity
b. Manifest

7. Componentes visuals básicos


a. Contenedores
b. TextView
c. Button
d. EditText
e. ImageView

8. Eventos y Referencias
a. Ids
b. Eventos

9. Navegación Básica
a. Intents
b. Parametros
c. Volver atrás

EOI Escuela de Organización Industrial http://www.eoi.es


4

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

1. ANDROID: Sistema Operativo


Ver previamente el Video 1

Inicialmente fue desarrollado por Android Inc., empresa que Google respaldó
económicamente y que adquirió en 2005. Android fue presentado en 2007 junto
con la fundación del Open Handset Alliance

El sistema operativo Android se usa en teléfonos inteligentes, ordenadores


portátiles, netbooks, tabletas, Google TV, relojes de pulsera, auriculares,
receptores decodificadores integrados59 y otros dispositivos

La plataforma de hardware principal de Android es la arquitectura ARM. Hay


soporte para x86 en el proyecto Android-x86, y Google TV utiliza una versión
especial de Android x86.

La ultima versión es Android 10 o Android Q que incluye Modo Oscuro, compartir


wifi mediante QR y permitir permisos solo cuando se usa la app entre otros.

Para más información ver:


https://android4all.com/2018/08/verisones-android-historia
https://developer.android.com/about/versions/10

2. LENGUAJES DE PROGRAMACIÓN EN ANDROID


Ver previamente el Video 2

a. Java

Java juega un papel sobre todo en la parte de soporte de casi para


cualquier cosa. En Java vas a encontrar muchísimas librerías que ya están
construidas para incluirlas en tus proyectos móviles, además de, como te
conté, una gran comunidad que siempre tienen respuestas y siempre
puedes ir y consultar y vas a encontrar información con respecto al
desarrollo y sobre todo en este último momento que es Android.

EOI Escuela de Organización Industrial http://www.eoi.es


5

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

b. C (NDK)

Android NDK, una herramienta que nos permite implementar parte de


nuestro código con otros lenguajes nativos como C o C++. Si bien esto nos
puede servir para reutilizar código como por ejemplo el relacionado con
la lógica de negocio, también podría servirnos para reutilizar librerías
que hayan sido escritas en este lenguaje.
Normalmente NDK se suele utilizar en determinadas aplicaciones que
quieren poder llevar a cabo un uso muy intenso de la CPU como por
ejemplo pueden ser los motores de videojuegos o de procesamiento de
señal. Este tipo de actividad requiere unas operaciones matemáticas muy
costosas, las cuales podemos optimizar gracias al uso de NDK.

c. Kotlin

Kotlin fue diseñado por Jetbrains. Jetbrains, aquella compañía que


también desarrollo el IDE, IntelliJ IDEA, en el cual, Android Studio está
basado 100%, IntelliJ IDEA.

Kotlin tiene una característica porque viene a resolver muchos problemas


que Java ha venido trayendo consigo, sobre todo muchos problemas de
que Java probablemente tiene mucho código para expresar algo, en
comparación con Kotlin que reduce bastante el trabajo.

Kotlin es una gran opción, es un lenguaje muy fácil de aprender, te


permite tener una cantidad menor de código, y viene a curar muchas
cosas que con Java no están todavía del todo curadas como por ejemplo,
los elementos nulos. Ahora con Kotlin tenemos Null Safety, no nos
permite para nada el tener por ahí elementos inicializados en nulos,
porque en seguida viene, la clásica excepción Null Pointer Exception.
Kotlin viene a curar este tipo de detalles, entonces Kotlin ha sido muy
amado y ha sido muy bien adoptado por la comunidad de desarrolladores,
como un sucesor de Java.

d. XML

XML no es un lenguaje de programación como tal, sino es más bien un


lenguaje de esquematización, gracias a XML es que podemos desarrollar
las interfaces que vemos en nuestras manos con las aplicaciones, eso que

EOI Escuela de Organización Industrial http://www.eoi.es


6

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

define un botón como un botón, se diseña con XML, se maqueta con XML.
Eso que define ese texto, o toda esa interfaz que tenemos en la
aplicación, se define con XML y se utiliza Java como motor controlador
de la interfaz.

e. Gradle(DSL)

Gradle, es una herramienta que permite la automatización de


compilación de código abierto, la cual se encuentra centrada en la
flexibilidad y el rendimiento. Los scripts de compilación de Gradle se
escriben utilizando Groovy o Kotlin DSL (Domain Specific Language).

Gradle tiene una gran flexibilidad y nos deja hacer usos otros lenguajes y
no solo de Java, también cuenta con un sistema de gestión de
dependencias muy estable. Gradle es altamente personalizable y rápido
ya que completa las tareas de forma rápida y precisa reutilizando las
salidas de las ejecuciones anteriores, sólo procesar las entradas que
presentan cambios en paralelo.

Además es el sistema de compilación oficial para Android y cuenta con


soporte para diversas tecnologías y lenguajes.

3. ANDROID STUDIO: IDE Principal


Ver previamente el Video 3

Android Studio es el entorno de desarrollo integrado (IDE) oficial para el


desarrollo de apps para Android, basado en IntelliJ IDEA. Además del potente
editor de códigos y las herramientas para desarrolladores de IntelliJ, Android
Studio ofrece incluso más funciones que aumentan tu productividad cuando
desarrollas apps para Android

Para más información ver:


https://developer.android.com/studio/intro
https://developer.android.com/studio/run

EOI Escuela de Organización Industrial http://www.eoi.es


7

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

4. INTRODUCCIÓN A KOTLIN
Ver previamente el Video 4

Variables y constantes
La decisión de usar var o val depende del uso que queramos darle, pero resumiendo
podríamos decir que si es para almacenar una constante debemos usar val y lo
mismo si es un dato que queramos garantizar que no se modifique, y para el resto
nos quedamos con var.

Tipos de Variables
El tipo de la variable en Kotlin se especifica después del nombre de la variable y
precedido de «:«, vamos a ver cuáles son los tipos básicos que tenemos en Kotlin:

Tipos númericos:
Int: Para enteros de hasta 32bits. Ej. val diasSiglo: Int = 36526
Long: Para enteros de hasta 64bits. Ej. val distanciaLunaMetros: Long = 384400000L
Short: Para enteros de hasta 16bits. Ej. val diasAno: Byte = 3650
Byte: Para enteros de hasta 8bits. Ej. var edad: Byte = 30
Float: Para decimales de hasta 32bits. Ej. var peso: Float = 86.7F
Double: Para decimales de hasta 64bits. Ej. var temperatura: Double = 12.23
Char: Para almacenar caracteres de forma individual. Ej. var letraDNI: Char = 'D'
Boolean: Para almacenar los valores lógicos true y false. Ej. val esUnaVariable: Boolean = true
String: Permite almacenar cadenas de caracteres. Ej. var nombre: String = "Ivan"
Arrays: Permite almacenar listas de objetos. Ej. val misColoresFavoritos = arrayOf("naranja",
"azul", "rojo", "negro")

Inferir Tipo:
var mensaje = “Hola Mundo”

Como podemos apreciar, en la línea de código anterior indicamos que creamos una
variable mutable llamada mensaje con el texto “Hola Mundo”, pero no indicamos
explícitamente infiere que es de tipo String en base al valor establecido en la
variable.

Arrays:
Los arrays son secuencias de datos, del mismo tipo e identificados por un nombre
común. Para hacerlo más fácil de entender imaginemos que tenemos que
almacenar los 7 días de la semana, podríamos crear 7 variables Strings o
almacenarlas todas en una sola array.

val weekDays = arrayOf("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")

EOI Escuela de Organización Industrial http://www.eoi.es


8

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

La variable weekDays contiene todos los días de la semana. Ahora para acceder a
cada uno de los valores, lo haremos a través de la posición. Por ejemplo,
imaginemos un edificio, cada valor se almacena en una planta, por lo que el primer
valor estará en la posición 0, el segundo en la 1 y así con cada uno de ellos.
Recordar que se empieza en la posición 0.
println(weekDays.get(3))

La línea de código anterior imprimirá el texto “Jueves”

las array tienen una serie de limitaciones, entre ellas que tienen que tener un
tamaño fijo y será el número de valores que le asignemos al instanciarla, eso
significa que siempre va a tener un tamaño de 7, y no podremos añadir más datos,
pero si cambiarlos a través de la función set().

weekDays.set(0, "Horrible lunes") //Contenía Lunes


weekDays.set(4, "Por fin viernes") //Contenía Viernes

La función set() recibe dos parámetros, el primero es la posición a la que queremos


acceder y el segundo el es nuevo valor a reemplazar. Hay que tener en cuenta que
el valor que le mandemos debe ser del mismo tipo, por ejemplo esta array son de
Strings, por lo que no podemos pasar un Int.

ArrayList:

Una lista es una colección ordenada de elementos en la que podremos modificar


sus elementos aun sin haber definido su tamaño previamente.

La interfaz List de la librería estándar Kotlin extiende solo la interfaz Collection.


En otra palabras, su único padre es la interfaz Collection. Esta anula todas las
funciones en la interfaz padre para abastecer sus necesidades especiales y también
define sus propias funciones, tales como:

 get(index: Int): un operador de función que devuelve el elemento en el índice


especificado.
 indexOf(element: E): devuelve el índice de la primera ocurrencia del elemento
pasado como un argumento en la lista, o -1 si ninguno es encontrado.
 lastIndexOf(element: E): devuelve el índice de la última ocurrencia del elemento
pasado como un argumento en la lista, o -1 si ninguno es encontrado.
 listIterator(): devuelve un iterador de lista sobre los elementos en la lista.
 subList(fromIndex: Int, toIndex: Int): devuelve una lista que contiene la porción de
la lista entre los índices especificados de inicio y fin.

EOI Escuela de Organización Industrial http://www.eoi.es


9

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

Cualquiera de estas funciones devolverá una interfaz tipo Kotlin MutableList. Esta
interfaz extiende las interfaces MutableCollection y List discutidas anteriormente
en esta sección. La interfaz MutableList agrega métodos para la recuperación o
sustitución de un elemento basado en su posición:

 set(index: Int, element: E): sustituye a un elemento en la lista con otro elemento.
Esto devuelve el elemento previamente en la posición especificada.
 add(index: Int, element: E): inserta un elemento en el índice especificado.
 removeAt(index: Int): se deshace del elemento en un índice particular.

Opcionales (NullSafe):

En Kotlin los objetos por defecto no aceptan valores nulos, para que le podamos
asignar un null tendremos que indicar que ese objeto realmente puede ser null. De
esta forma vamos a poder garantizar que no se no producirá un
NullPointerException en tiempo de ejecución sin necesidad de llenar todo el código
de comprobaciones if (a != null) o if (b == null) cuando las variables no deban ser
null en ningún caso, pero también nos da una vía de escape para que podamos
tener los queridos NullPointerException.

var nombre: String?


nombre = null

var longitud: Int = nombre.length

Intentando sacar la longitud de la cadena cuando es null, pero no nos deja porque
no compila y nos dice que tenemos 2 opciones ?. si queremos hacerlo de forma
segura o !!. si no queremos que el compilador compruebe si puede ser null.

var longitud: Int = nombre!!.length


var longitud: Int? = nombre?.length

Operador Elvis:

Si solo usamos ?. siempre vamos a poder recibir un null y por lo tanto estamos
propagando a los siguientes objetos o funciones la necesidad de soportar nulos,
pero puede que no sea lo que queramos. Para evitar esto podemos usar el operador
Elvis ?: que nos permite definir un valor alternativo si se encuentra un null, por
ejemplo para la longitud podríamos usar 0.

var nombre: String? = null


var longitud: Int = nombre?.length ?: 0

EOI Escuela de Organización Industrial http://www.eoi.es


10

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

5. PROGRAMACIÓN BÁSICA EN KOTLIN


Ver previamente el Video 5

Los condicionales if, else y when en Kotlin

En Kotlin como en otros lenguajes de programación existen las sentencias


condicionales para ejecutar un fragmento de código u otro en función de que se
cumplan o no determinadas condiciones y los nombres para estas condiciones
son los habituales if, else y when, el equivalente al switch de Java o JavaScript.

Para determinar si se cumple o no una condición se utilizan los booleanos true y


false (ej. var isRojo:Boolean = false), que se pueden utilizar directamente o
también pueden ser el resultado de hacer alguna comparación mediante < <= >
>= == != e incluso de varias comparaciones distintas utilizando alguno de los
operadores lógicos (&& || !)

IF EN KOTLIN
Con if en Kotlin se evalúa la condición introducida entre los paréntesis y si es
cierta (el resultado es true) entonces ejecuta el bloque de código del if y si no
se cumple se continua sin ejecutarlo.

if (condicion) {
// El código de este bloque se ejecuta si se cumple la condición
}

IF ELSE EN KOTLIN
Con el if Kotlin nos permite ejecutar un bloque de código concreto si se cumple
cierta condición pero si queremos que se ejecute otro código distinto cuando no
se cumpla esa condición podríamos utilizar otro if con la condición inversa o
bien utilizar el else para conseguir un código más sencillo.

if (condicion) {
// El código de este bloque se ejecuta si se cumple la condición
} else {
// Y esto es lo que se ejecuta si no se cumple
}

EJEMPLO:

En este ejemplo las opciones son excluyentes (un número no puede ser menor y
mayor que 0 a la vez) pero en caso de que no lo fuesen como en el siguiente
ejemplo siempre entra en el primer if para el que se cumpla la condición y

EOI Escuela de Organización Industrial http://www.eoi.es


11

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

como solo se puede ejecutar una de las opciones ya no pasará por el resto, por
lo tanto en este ejemplo si el numero fuese 5 imprimiría simplemente Unidades
aunque el 5 cumple las 3 condiciones.

if (numero > 0 && numero < 10) {


println("Unidades")
} else if (numero < 100) {
println("Decenas")
} else if (numero < 1000) {
println("Centenas")
}

WHEN EN KOTLIN
Si la condición que vamos a evaluar va a tomar un número determinado de
valores que tenemos controlados a priori y para los que queremos ejecutar un
código diferente podemos utilizar when en lugar de usar múltiples if else para
hacer un código más legible.

when (condicion) {
valor1 -> {//...}
valor1 -> {//...}
valorN -> {//...}
else -> {//...}
}

Y una de la características interesantes de Kotlin es que los valores del when no


tienen que ser solo valores fijos, sino que se pueden utilizar rangos y también se
puede validar la condición contra funciones que definamos nosotros, vamos que
podemos utilizar en el when las mismas condiciones que podemos usar en un if.

when (numero) {
1,2 -> {
// Es 1 o 2
}
in 3..10 -> {
// Es un numero entre 3 y 10
}
!in 10..100 -> {
// Es un numero que no esta entre el 10 y el 100
}
getEdadUsuario() -> {
// El numero es igual que el resultado de la funcion getEdadUsuario
}
else -> {
// Cualquier otra cosa
}
}

EOI Escuela de Organización Industrial http://www.eoi.es


12

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

CLASES OBJETOS Y FUNCIONES:

Una clase es una unidad de un programa que agrupa funciones y datos para
realizar ciertas tareas relacionadas. En Kotlin declaramos una clase utilizando la
palabra reservada class—de manera similar a Java.
class Book

El código anterior es la forma más simple de declarar una clase—solamente


creamos una clase vacía llamada Book. Podemos instanciar esta clase aún si no
contiene un cuerpo, utilizando su constructor por defecto.

val book = Book()

Como puedes observar en el código aquí arriba, no utilizamos la palabra


reservada new para instanciar esta clase—como es usual en otros lenguajes de
programación. new no es una palabra reservada en Kotlin. Esto hace que
nuestro código fuente sea conciso al crear una instancia de clase. Pero debes
tener en cuenta que la instancia de una clase Kotlin en Java requerirá la
palabra reservada new.

class Book {
var title: String
var isbn: Long

constructor(title: String, isbn: Long) {


this.title = title
this.isbn = isbn
}
}

La función constructor() se denomina constructor secundario en Kotlin. Este


constructor es equivalente al constructor de Java que llamamos cuando
instanciamos una clase.

En Kotlin, no existe en concepto de campo tal como lo conoces; en su lugar,


emplea el concepto de "propiedades". Por ejemplo, tenemos dos propiedades
mutables (lectura-escritura) declaradas con la palabra reservada var: title y
isbn en la clase Book.

También podemos omitir la palabra constructor, pero sólo si no tiene ningún


modificador de acceso (public, private, o protected), o ninguna annotation.

class Book (var title: String = "default value", var isbn: Long)

EOI Escuela de Organización Industrial http://www.eoi.es


13

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

FUNCIONES:

También llamadas métodos en otros lenguajes como por ejemplo java. Una
función no es más que un conjunto de instrucciones que realizan una
determinada tarea y la podemos invocar mediante su nombre.

Las funciones se declaran usando la palabra clave fun, seguida del nombre del
método, los paréntesis donde declararemos los valores de entrada y unas llaves
que limitan la función.

fun showMyName(){
println("Me llamo Aris")
}

Las funciones con parámetros de entrada, que son iguales, pero al llamarlas
habrá que mandarle las variables que necesite.

fun showMyInformation(name: String, lastName: String, age: Int){


println("Me llamo $name $lastName y tengo $age años.")
}

Como se puede observar, tiene tres parámetros de entrada, la forma de


declararlos es muy fácil el nombre de la variable, seguida de dos puntos y el
tipo de variable, aquí si es obligatorio definir el tipo.

Obviamente al llamar al método podemos pasarle variables recuperadas de


otros métodos y demás.

una función puede devolver un resultado o lo que haga nuestro método. La


única limitación es que solo se puede devolver un parámetro, aunque para eso
tenemos los métodos (ya lo veremos más tarde).

fun main(args: Array<String>) {


var result = add(5, 10)
println(result)
}
fun add(firsNumber: Int, secondNumber: Int) : Int{
return firsNumber + secondNumber
}

Como el ejemplo anterior añadimos los parámetros de entrada pero esta vez, al
cerrar los paréntesis pondremos el tipo de variable que debe devolver nuestra
función. Luego la función hará todo lo que tenga que hacer y cuando tenga el
resultado, lo devolveremos con la palabra clave return.

Si el método es muy fácil, podemos evitar las llaves y simplificar la función un


poco más.

EOI Escuela de Organización Industrial http://www.eoi.es


14

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

fun add(firsNumber: Int, secondNumber: Int) : Int = firsNumber + secondNumber


BUCLES:

Los bucles son estructuras de control básicas para ejecutar fragmentos de


código múltiples veces de forma consecutiva sin tener que escribir el mismo
código repetido múltiples veces, en Kotlin podemos usar los bucles for, while y
do while.

FOR
El bucle for es el que se utiliza más habitualmente y en Kotlin es un poco
distinto a como es en Java, aquí tenemos una variable que itera sobre un rango
o sobre una lista, array, map,… y como tal en cada iteración toma el siguiente
valor.

Por ejemplo para imprimir los números del 1 al 5 podemos hacer un bucle for en
el que indiquemos el rango 1..5 y no tenemos que preocuparnos de declarar el
índice ni de actualizarlo.

for(num in 1..5) {
println("numero: $num")
}

/* Resultado:
numero: 1
numero: 2
numero: 3
numero: 4
numero: 5
*/

Así en Kotlin podemos usar bucles for con la misma estructura ya sea para
recorrer algún tipo de colección de objetos o para ejecutarlo un número
determinado de veces (un rango).

WHILE

Con while podemos hacer que se ejecute un bloque de código determinado


hasta que se cumpla una condición.

Cuando usamos este tipo de bucles hay que tener cuidado para evitar producir
bucles infinitos no deseados, para lo que necesitamos que dentro del bucle se
actualice el valor que usemos en la condición de salida bajo alguna
circunstancia.

En el siguiente ejemplo se ejecuta el bucle mientras (while) el día sea menor


que 6 y cuando deja de cumplirse termina.

var dia= 1

EOI Escuela de Organización Industrial http://www.eoi.es


15

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

println("Empiza la semana")
while(dia < 6) {
if (dia == 1) {
println("$dia dia trabajando")
} else {
println("$dia dias trabajando")
}

dia++ // Actualizamos la condicion


}
println("A descansar")

/* Resultado:
Empiza la semana
1 dia trabajando
2 dias trabajando
3 dias trabajando
4 dias trabajando
5 dias trabajando
A descansar
*/

SALIR DE UN BUCLE

Mientras que con continue seguimos dentro del bucle con break se sale
completamente aunque aún no se haya cumplido la condición para que termine.
Vamos con otro ejemplo con números, supongamos que queremos que se
impriman todos los números de un rango, pero si encontramos un múltiplo de 5
el bucle tiene que terminarse.

for (num in 1..10) {


if (num % 5 == 0) {
break
}
print("$num ")
}

/* Resultado:
1234
*/

ORDENACIÓN DE ARRAYLIST

Para ordenar de forma ascendente un arraylist de números haremos lo siguiente


val numerosList1 = arrayListOf(9, 14, 8)

//Sort para objetos simples


numerosList1.sort()

Y para ordenar de forma descendente:


numerosList1.sortDescending()

EOI Escuela de Organización Industrial http://www.eoi.es


16

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

Para ordenar objetos complejos, por ejemplo nuestra Clase Marca, por el campo
nombre tendremos que hacer lo siguiente:

val marcas = arrayListOf(


Marca("Mercedes"),
Marca("Ford"),
Marca("BMW"),
Marca("Tesla")
)

marcas.sortByDescending { it.nombre }

FILTRAR ARRAYLIST:

Usando el arraylist anterior con las marcas de coches si queremos filtrar por
marcas que contengan la letra M por ejemplo lo haremos del siguiente modo:

val marcasFiltradas = marcas.filter { it.nombre.contains("M") }

Dentro de la función filter siempre tiene que contener una condición, en este
caso si contiene una letra que hemos especificado, pero puede ser una
comparación de números, o si no está en blanco.

EOI Escuela de Organización Industrial http://www.eoi.es


17

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

6. PRIMERA APP PARA ANDROID


Ver previamente el Video 6

Activity:

Para entender como funciona una app en Android debemos comprender qué es
un Activity y cual es su ciclo de vida.

EOI Escuela de Organización Industrial http://www.eoi.es


18

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

Es importante que conozcas cuales son los ciclos de vida y como funcionan, con
esto podrás tomar las precauciones necesarias cuando desarrolles tu aplicacion
Android y desarrollar una tarea especifica en cada ciclo de vida de la actividad,
logrando así un optimo y fluido funcionamiento de tu aplicación.

A continuación mencionaremos los estados o ciclos de vida de una Actividad


(Activity), se debe de hacer una devolución de llamada al ciclo de vida
determinado, vamos a describir como funciona cada uno de ellos.

onCreate()
En este ciclo se lleva a cabo la creación de la primera interface con sus
elementos necesarios que la componen, esta primera vista se debe de mostrar a
los usuarios cuando ingresan a la aplicación, también en este ciclo se cargan
tareas y subprocesos integrados y que cumplen una función específica dentro de
la aplicación

OnCreate() se lleva a cabo una sola vez durante todo el ciclo de vida de una
Actividad, es un ciclo muy importante dentro de una aplicación Android. El
método onCreate() se puede declara de la siguiente manera

onStart()
Después de haberse creado la actividad principal, entra el ciclo de vida
onStart() el cual lleva acabo la ejecución de tareas asignadas en la aplicación,
para que se lleve acabo tareas onStart() el Activity debe haberse creado por
completo, este método puede escribirse de la siguiente manera

onResume()
Este estado se lleva acabo cuando un usuario vuelve o continua usando la
aplicación, por ejemplo si estas usando la aplicación de mensajería WhatsApp y
decides entrar a la aplicación Facebook para ver las novedades en tu red de
contactos, pero luego decides volver a usar WhatsApp, entonces al retomar el
uso WhatsApp se entra al ciclo de vida onResume() en donde se vuelven activar
las tareas que se estaban ejecutando en WhatsApp, para declarar este método
puedes escribir lo siguiente

onPause()
Este estado detiene momentáneamente ciertas tareas en la aplicación Android
que se le hayan indicado dentro del método onPause(), este puede ayudarte a
detener el consumo de datos, consumo de memoria y de recursos delicados,
este estado se puede dar en las siguiente situaciones:

EOI Escuela de Organización Industrial http://www.eoi.es


19

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

Cuando el usuario deja la aplicación para irse a otra aplicación o realizar otra
tarea en el equipo móvil.
En Android 7 hacia delante se pueden abrir aplicaciones en múltiples ventanas,
como solo una de las aplicaciones (ventanas) se prioriza o enfoca, las demás
aplicaciones se detienen.
Cuando dentro de una actividad se abre una ventana de diálogo, la actividad
pasa a mostrarse de fondo y queda parcialmente visible, entonces se detienen
todas las tareas que se ejecutaban en ella para dar prioridad a la ventana de
diálogo.
Puedes declara este método de la siguiente manera:

onStop()
Este estado se lleva a cabo cuando la actividad o vista de tu aplicación ya no es
visible para el usuario y pasa a detener todas las tareas que se estaban
ejecutando, así mismo cuando la aplicación entra al estado onStop(), el sistema
detiene y libera todos los recursos que no son necesarios usarlos.

Por ejemplo una aplicación puede detener animaciones determinadas y que la


interface continué trabajando con normalidad. También se puede usar el estado
onStop() para que al detener las tareas aproveches en guardar información en la
base de datos, así aprovechas que se detuvieron tareas y recursos para llevar a
cabo del guardado de datos.

Para declara este método puedes escribir lo siguiente:

onDestroy()
Este estado o ciclo de vida es llamado antes de que una actividad finalice o sea
destruida, este estado se puede dar porque:

La actividad esta terminando debido a que el usuario ha descartado


completamente la realización de una tarea determinada.
El sistema destruye temporalmente la actividad debido a un cambio de
configuración como la rotación del dispositivo o cambiar al modo de ventanas
múltiples.
Se puede aprovechar para limpiar todas las tareas necesarias, antes que de se
destruya la actividad por completo

EOI Escuela de Organización Industrial http://www.eoi.es


20

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

MANIFEST:

Todos los proyectos de apps deben tener un archivo AndroidManifest.xml (con


ese mismo nombre) en la raíz de la fuente del proyecto. El archivo de
manifiesto describe información esencial de tu aplicación para las herramientas
de creación de Android, el sistema operativo Android y Google Play.

Entre muchas otras cosas, el archivo de manifiesto debe declarar lo siguiente:

 El nombre del paquete de la aplicación, que normalmente coincide con el


espacio de nombres de tu código. Al empaquetar la aplicación, las
herramientas de compilación sustituyen este valor por el ID de aplicación
de los archivos de compilación de Gradle, que se utiliza como
identificador único de la aplicación en el sistema y en Google Play.
 Los componentes de la aplicación, que incluyen todas las actividades,
servicios, receptores de emisiones y proveedores de contenido. También
puede declarar las configuraciones de dispositivos que puede manejar,
además de filtros de intents que describen cómo se puede iniciar el
componente.
 Los permisos que necesita la aplicación para acceder a las partes
protegidas del sistema o a otras aplicaciones.
 Las funciones de hardware y software que requiere la aplicación afectan
a los dispositivos que pueden instalar la aplicación desde Google Play.

Para más información ver:


https://developer.android.com/guide/topics/manifest/manifest-
intro?hl=es-419
https://developer.android.com/guide/components/activities/intro-
activities

EOI Escuela de Organización Industrial http://www.eoi.es


21

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

7. COMPONENTES VISUALES BÁSICOS


Ver previamente el Video 7

a. Contenedores

LINEARLAYOUT:

LinearLayout es un grupo de vista que alinea todos los campos


secundarios en una única dirección, de manera vertical u horizontal.
Puedes especificar la dirección del diseño con el atributo
android:orientation.

Todos los campos secundarios de un LinearLayout se apilan uno detrás de


otro, por lo cual una lista vertical solo tendrá un campo secundario por
fila, independientemente del ancho que tengan, y una lista horizontal
solo tendrá la altura de una fila (la altura del campo secundario más alto,
más el relleno). Un LinearLayout respeta los márgenes entre los campos
secundarios y la gravedad (alineación a la derecha, centrada o a la
izquierda) de cada campo secundario.

EOI Escuela de Organización Industrial http://www.eoi.es


22

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

Aquí tenemos un ejemplo de uso de un LinearLayout

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical" >
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/to" />
<Button
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="@string/send" />
</LinearLayout>

Relative Layout:

RelativeLayout es un grupo de vistas que muestra vistas secundarias en posiciones


relativas. La posición de cada vista puede especificarse como relativa a elementos
hermanos (como a la izquierda o debajo de otra vista) o en posiciones relativas al
área RelativeLayout principal (como alineada a la parte inferior, izquierda o
centro).

EOI Escuela de Organización Industrial http://www.eoi.es


23

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

Ejemplo de uso de un RelativeLayout:

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


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp" >
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/reminder" />
<Button
android:layout_width="96dp"
android:layout_height="wrap_content"
android:layout_below="@id/name "
android:layout_alignParentRight="true"
android:text="@string/done" />
</RelativeLayout>

Para más información ver:


https://developer.android.com/guide/topics/ui/layout/relative?hl=es_419

CONSTRAINTLAYOUT:

ConstraitLayout nos permitirá simplificar las interfaces en anidamiento, para


hacerlas lo más complejas posibles a nivel de diseño. Este layout, similar al
RelativeLayout nos permitirá establecer relaciones entre todos los elementos
y la propia vista padre, permitiendo así ser mucho más flexible que los
demás.

EOI Escuela de Organización Industrial http://www.eoi.es


24

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

Ejemplo de un ConstraintLayout:

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


<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/titulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textColor="#333333"
app:layout_constraintBottom_toTopOf="@+id/editText"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@color/colorPrimary"
android:text="Aceptar"
android:textColor="#FFFFFF"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText
android:id="@+id/editText"

EOI Escuela de Organización Industrial http://www.eoi.es


25

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Name"
android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

TEXTVIEW:

TextView muestra texto al usuario y, opcionalmente, les permite


editarlo. Un TextView es un editor de texto completo, sin embargo, la
clase básica está configurada para no permitir la edición.

Propiedades de un TextView:

Cambiar el texto
android:text="Titulo"

Cambiar id del elemento (id).


android:id="@+id/cambiarid"

Estilo de texto (textStyle): cursiva (italic), negrita (bold).


android:textStyle="italic"

Tipo de entrada (inputType): varias líneas (multiline).


android:inputType="textMultiLine"

Scroll (scrollbars): vertical/horizontal.


android:scrollbars = "vertical"

Tamaño del texto (textSize).


android:textSize="15dp"

Color de letra (textColor).


android:textColor="#D32F2F"

Color de fondo (background).


android:background="#D32F2F"

Mantener pulsado (longClickable). Ideal para copiar texto.


android:longClickable="true"

Typeface (tipografía).
android:typeface="serif"

Ejemplo de TextView:

EOI Escuela de Organización Industrial http://www.eoi.es


26

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

<TextView
android:id="@+id/text_id"
android:layout_width="300dp"
android:layout_height="200dp"
android:capitalize="characters"
android:text="hello_world"
android:textColor="@android:color/holo_blue_dark"
android:textColorHighlight="@android:color/primary_text_dark"
android:textSize="50dp"/>

EDITTEXT:

Permite que a los usuarios editar un campo de texto en las aplicaciones


Android. Comparte muchas propiedades con el TextView, como el color de
letra, fondo, texto etc. Pero la propiedad mas destacada es el tipo de
campo que va a contener, el cual nos mostrará un teclado u otro y nos
ayudara a limitar lo que escribe el usuario en él

TEXT FIELDS

Plain Text
Person Name
Password
Password (numeric)
E-mail
Phone
Postal Address
Multiline Text
Time
Date
Numer
Number (signed)
Number (decimal)

Tenemos muchas propiedades para poder editar un campo, pero la


más utilizada es Plain Text. Esta propiedad la usaremos para que el
usuario pueda escribir encima. Normalmente, no le escribiremos
texto, pero podemos hacerlo igualmente.

Ejemplo de EditText:
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Name"

EOI Escuela de Organización Industrial http://www.eoi.es


27

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

BUTTON:

Un botón es un control con texto o imagen que realiza una acción cuando el
usuario lo presiona. La clase Java que lo represente es Button y puedes
referirte a él dentro de un layout con la etiqueta <Button> respectivamente.

Ejemplo de Button:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="AGREGAR" />

IMAGEVIEW:

El control ImageView permite mostrar imágenes en la aplicación. La


propiedad más interesante es android:src, que permite indicar la imagen a
mostrar. Nuevamente, lo normal será indicar como origen de la imagen el
identificador de un recurso de nuestra carpeta /res/drawable, por ejemplo
android:src=»@drawable/unaimagen». Además de esta propiedad, existen
algunas otras útiles en algunas ocasiones como las destinadas a establecer el
tamaño máximo que puede ocupar la imagen, android:maxWidth y
android:maxHeight, o para indicar cómo debe adaptarse la imagen al tamaño
del control, android:scaleType (5=CENTER, 6=CENTER_CROP,
7=CENTER_INSIDE, …). Además, como ya comentamos para el caso de los
controles ImageButton, al tratarse de un control de tipo imagen deberíamos
establecer siempre la propiedad android:contentDescription para ofrecer
una breve descripción textual de la imagen, algo que hará nuestra aplicación
mucho más accesible.

Ejemplo de ImageView:
<ImageView android:id="@+id/ImgFoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>

EOI Escuela de Organización Industrial http://www.eoi.es


28

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

8. Eventos y Referencias
Ver previamente el Video 8

En Android, existe más de una forma de interceptar los eventos desde una
interacción del usuario con tu aplicación. Al considerar los eventos dentro de tu
interfaz de usuario, el enfoque consiste en capturar los eventos desde el objeto
de vista específico con el que interactúa el usuario. La clase de vista
proporciona los medios para hacerlo.

Ids:

Para poder acceder en nuestro Activity a los elementos visuales que hemos
creado en el layout(xml) todos tienen que tener un id referenciado de esta
manera:

android:id="@+id/button"

Ahora desde nuestro Activity podremos acceder a los datos que contiene o
modificarlos:

Aquí podemos establecer lo que hará nuestro código una vez pulsado el botón
con id BUTTON.

button.setOnClickListener {

Si queremos acceder al texto introducido por el usuario en un EditText:

val texto = editText.text.toString()

Para más información ver:


https://developer.android.com/guide/topics/ui/ui-events?hl=es-419

EOI Escuela de Organización Industrial http://www.eoi.es


29

Curso Certificado en Creación de Aplicaciones Móviles


Entornos de Desarrollo

9. NAVEGACIÓN BÁSICA
Ver previamente el Video 9

Un Intent es un objeto que proporciona vinculación en tiempo de ejecución


entre componentes separados, como dos actividades. El Intent representa la
"intención de realizar una acción" de una app. Pueden usarse para una gran
variedad de tareas, pero aqui, tu intent iniciará otra actividad, TestActivity.

En MainActivity, agrega la constante el parámetro “nombre” que es lo que


contiene el editText en nuestro activity y queremos enviar a otro Activity.

val intent = Intent(this, TestActivity::class.java)


intent.putExtra("nombre", editText.text.toString())
startActivity(intent)

Ahora desde el activity TestActivity vamos a recoger ese valor y pintarlo en un


TextView

val nombre = intent.getStringExtra("nombre")


texto.text = nombre

Para más información ver:


https://developer.android.com/training/basics/firstapp/starting-activity?hl=es-
419

EOI Escuela de Organización Industrial http://www.eoi.es

S-ar putea să vă placă și