# Ejercicios

## LinearLayout

Crea una aplicación llamada *LinearLayout*. La aplicación contendrá una única actividad, llamada *LinearLayout*, cuya interfaz gráfica estará contruida exclusivamente a partir de layouts de tipo `LinearLayout` y deberá ser lo más parecida posible a la mostrada en la siguiente imagen.

![](/files/-LwrBUGltGB5lr2oX7nX)

> Las líneas han sido creadas por medio de elementos `View` a los que se les ha asignado una altura de *1dip* mediante el atributo `android:layout_height` y un color de fondo *#FFFFFF* mediante el atributo `android:background`.

## Calculadora sencilla

El objetivo de este ejercicio es implementar una calculadora sencilla. La aplicación *Calculadora* contendrá una única actividad de nombre *Principal*, cuya interfaz gráfica tendrá el siguiente aspecto:

![](/files/-LwrBUGn0lFBXk5ChpgB)

Como se puede observar nuestra calculadora es bastante limitada. Tan solo acepta dos operandos (que se podrán introducir en los dos `EditText`) y cuatro operaciones seleccionables con el `Spinner`: *+*, *-*, *\** y */*. En el `TextView` inferior deberá aparecer el resultado de la operación cuando se pulse el botón *Ok*.

A la hora de diseñar la interfaz se ha utilizado un `RelativeLayout`. Los atributos más importantes utilizados han sido: `layout_alignParentRight`, `layout_below`, `align_marginRight`, `android:inputType="number"` para los `EditText` y `android:gravity="right"` para el `TextView` y los `EditText`.

## Ciudades

En este ejercicio practicaremos con los elementos de tipo `Spinner`. Crea una nueva aplicación llamada *Ciudades* con una única actividad. La interfaz de dicha actividad estará compuesta por un `TextView` con `android:id="@+id/texto"` y dos elementos de tipo `Spinner` con identificadores `android:id="@+id/paises"` y `android:id="@+id/ciudades"`. El primero de ellos permitirá escoger entre tres países cualquiera (inicialmente ningún país estará seleccionado). El segundo permitirá escoger una ciudad según el país seleccionado en el anterior. Cada vez que se seleccione un país en el primer `Spinner` deberán cambiar las opciones del segundo, mostrando dos ciudades del país seleccionado.

La ciudad seleccionada en el segundo `Spinner` aparecerá en el `TextView` de la parte superior.

Para completar el ejercicio debes seguir los siguientes pasos:

* Añade el `TextView` y los dos `Spinner` al recurso layout de la aplicación, sin olvidar añadir a estos dos últimos su correspondiente atributo `android:prompt` (con los textos "Selecciona país" y "Selecciona ciudad" respectivamente).
* Crea las opciones para los `Spinner` en el archivo *arrays.xml* de los recursos con el siguiente contenido:

```markup
<resources>
    <string-array name="paises">
        <item>España</item>
        <item>Alemania</item>
        <item>Francia</item>
    </string-array>

    <string-array name="ciudadesespana">
        <item>Madrid</item>
        <item>Barcelona</item>
    </string-array>

    <string-array name="ciudadesalemania">
        <item>Berlin</item>
        <item>Wacken</item>
    </string-array>

    <string-array name="ciudadesfrancia">
        <item>París</item>
        <item>Marsella</item>
    </string-array>
</resources>
```

* Completa las opciones correspondientes del primer `Spinner` para que cargue el array de países.
* Rellena el segundo `Spinner` con las ciudades correspondintes al primer país. Esto debes hacerlo así porque siempre que inicies la actividad será el primer país el que se encuentre seleccionado.
* Asígnale al TextView como valor inicial el nombre de la primera ciudad, pues será la que se encontrará seleccionada al iniciar la actividad.
* Crea un evento para el `Spinner` de paises para que cada vez que se seleccione una opción se muestren las opciones adecuadas en el `Spinner` de ciudades.
* Añade un manejador al `Spinner` de ciudades para que cada vez que se seleccione una opción se muestre en el `TextView`.

> Para obtener el texto correspondiente a la opción seleccionada en el `Spinner` puedes utilizar el método `getSelectedItem` del mismo. Una vez hecho esto puedes llamar al método `toString` para obtener la cadena correspondiente.

## Abrir actividades

En este ejercicio vamos a crear una aplicación llamada *Activities* para navegar entre tres actividades. Las tres actividades tendrán de nombre *Actividad1*, *Actividad2* y *Actividad3*. La interfaz gráfica de cada una de ellas consistirá únicamente en un `TextView` mostrando su nombre y dos botones para cambiar a las otras dos actividades posibles. Los botones de cada actividad serán distintos: en la actividad 1 tendremos botones para ir a la actividad 2 y 3, en la 2 para ir a la 1 y la 3, y en la 3 para ir a la 1 y la 2.

Recuerda que para crear una nueva actividad hay que añadirla también al `AndroidManifest.xml`, antes del cierre de `<application/>`:

```markup
<activity android:name=".Actividad2"
          android:label="@string/app_name">
</activity>
```

> Prueba a asignar al atributo `android:noHistory` de cada actividad en el *Manifest* de la aplicación el valor `true`. Comprueba cuál es el nuevo comportamiento al pulsar el botón "Atrás" del dispositivo móvil.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ajgallego.gitbook.io/introduccion-a-android/sesion02-apuntes/sesion02-ejercicios.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
