Compartir vía


Hello, Android Multiscreen: inicio rápido

Esta guía de dos partes expande la aplicación Phoneword para controlar una segunda pantalla. Por el camino, se presentan bloques de creación básicos de aplicaciones Android con un análisis más profundo de la arquitectura de Android.

En la parte del tutorial de esta guía, agregará una segunda pantalla a la aplicación Phoneword para realizar un seguimiento del historial de números traducidos mediante la aplicación. La aplicación final tendrá una segunda pantalla en la que se mostrarán los números "traducidos", como se muestra en la captura de pantalla de la derecha:

Capturas de pantalla de la aplicación de ejemplo

La sección complementaria Análisis detallado revisa lo que se creó y describe la arquitectura, la navegación y otros conceptos de Android nuevos que encontrará en el camino.

Requisitos

Dado que esta guía continúa desde donde lo deja Hello, Android, requiere la finalización de Hello, Android: inicio rápido.

Tutorial

En este tutorial agregará una pantalla Translation History (Historial de traducciones) a la aplicación Phoneword.

Para empezar, abra la aplicación Phoneword en Visual Studio y edite el archivo Main.axml en el Explorador de soluciones.

Sugerencia

Las versiones más recientes de Visual Studio admiten la apertura de archivos .xml dentro de Android Designer.

Android Designer admite tanto archivos .axml como .xml.

Actualización del diseño

En el cuadro de herramientas, arrastre un botón hasta la superficie de diseño y colóquelo debajo de la vista de texto TranslatedPhoneWord. En el panel Propiedades, cambie el Id del botón por @+id/TranslationHistoryButton.

Arrastrar un nuevo botón

Establezca la propiedad Text del botón en @string/translationHistory. Android Designer lo interpretará literalmente, pero va a realizar algunos cambios para que el texto del botón se muestre correctamente:

Establecer el texto del botón Translation History (Historial de traducciones)

Expanda el nodo valores bajo la carpeta Recursos en el Explorador de soluciones y haga doble clic en el archivo de recursos de cadena, Strings.xml:

Abrir Strings.xml

Agregue el nombre y el valor de cadena translationHistory al archivo Strings.xml y guárdelo:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="translationHistory">Translation History</string>
    <string name="ApplicationName">Phoneword</string>
</resources>

El texto del botón Translation History (Historial de traducciones) debería actualizarse para reflejar el nuevo valor de cadena:

El botón refleja el nuevo valor de cadena

Con el botón Translation History (Historial de traducciones) seleccionado en la superficie de diseño, busque el ajuste enabled en el panel Propiedades y establezca su valor en false para deshabilitar el botón. Esto hará que el botón se vuelva más oscuro en la superficie de diseño:

Deshabilitar el botón Translation History (Historial de traducciones)

Creación de la segunda actividad

Cree una segunda actividad para activar la segunda pantalla. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto Phoneword y seleccione Agregar > Nuevo elemento...:

Adición de un nuevo archivo

En el cuadro de diálogo Agregar nuevo elemento, seleccione Visual C# > Actividad y asigne al archivo de actividad el nombre TranslationHistoryActivity.cs.

Reemplace el código de plantilla de TranslationHistoryActivity.cs por lo siguiente:

using System;
using System.Collections.Generic;
using Android.App;
using Android.OS;
using Android.Widget;
namespace Phoneword
{
    [Activity(Label = "@string/translationHistory")]
    public class TranslationHistoryActivity : ListActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            // Create your application here
            var phoneNumbers = Intent.Extras.GetStringArrayList("phone_numbers") ?? new string[0];
            this.ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, phoneNumbers);
        }
    }
}

En esta clase, se crea una ListActivity y se rellena mediante programación, por lo que no es necesario crear un nuevo archivo de diseño para esta actividad. Esto se explica con más detalle en Hello, Android Multiscreen: análisis detallado.

Adición de una lista

Esta aplicación recopila números de teléfono (que el usuario ha traducido en la primera pantalla) y los pasa a la segunda pantalla. Los números de teléfono se almacenan como una lista de cadenas. Para admitir listas (y también Intents, que se usan más adelante), agregue las directivas using siguientes a la parte superior de MainActivity.cs:

using System.Collections.Generic;
using Android.Content;

Después, cree una lista vacía que se pueda rellenar con números de teléfono. La clase MainActivity tendrá este aspecto:

[Activity(Label = "Phoneword", MainLauncher = true)]
public class MainActivity : Activity
{
    static readonly List<string> phoneNumbers = new List<string>();
    ...// OnCreate, etc.
}

En la clase MainActivity, agregue el código siguiente para registrar el botón Translation History (Historial de traducciones) (coloque esta línea después de la declaración translateButton):

Button translationHistoryButton = FindViewById<Button> (Resource.Id.TranslationHistoryButton);

Agregue el código siguiente al final del método OnCreate para conectar el botón Translation History (Historial de traducciones):

translationHistoryButton.Click += (sender, e) =>
{
    var intent = new Intent(this, typeof(TranslationHistoryActivity));
    intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
    StartActivity(intent);
};

Actualice el botón Traducir para agregar el número de teléfono a la lista de phoneNumbers. El controlador Click de translateButton debería ser similar al código siguiente:

// Add code to translate number
string translatedNumber = string.Empty;
translateButton.Click += (sender, e) =>
{
    // Translate user's alphanumeric phone number to numeric
    translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text);
    if (string.IsNullOrWhiteSpace(translatedNumber))
    {
        translatedPhoneWord.Text = "";
    }
    else
    {
        translatedPhoneWord.Text = translatedNumber;
        phoneNumbers.Add(translatedNumber);
        translationHistoryButton.Enabled = true;
    }
};

Guarde y compile la aplicación para asegurarse de que no existen errores.

Ejecución de la aplicación

Implemente la aplicación en un dispositivo o emulador. En las siguientes capturas de pantalla se muestra la aplicación Phoneword en ejecución:

Capturas de pantalla de ejemplo

Para empezar, abra el proyecto Phoneword en Visual Studio para Mac y edite el archivo Main.axml en Panel de solución.

Sugerencia

Las versiones más recientes de Visual Studio admiten la apertura de archivos .xml dentro de Android Designer.

Android Designer admite tanto archivos .axml como .xml.

Actualización del diseño

En el cuadro de herramientas, arrastre un botón hasta la superficie de diseño y colóquelo debajo de la vista de texto TranslatedPhoneWord. En el panel Propiedades, cambie el Id. del botón por @+id/TranslationHistoryButton:

Arrastrar un nuevo botón

Establezca la propiedad Text del botón en @string/translationHistory. Android Designer lo interpretará literalmente, pero va a realizar algunos cambios para que el texto del botón se muestre correctamente:

Establecer el texto del botón Translation History (Historial de traducciones)

Expanda el nodo values situado debajo de la carpeta Recursos en Panel de solución y haga doble clic en el archivo de recursos de cadena, Strings.xml:

Cadenas abiertas

Agregue el nombre y el valor de cadena translationHistory al archivo Strings.xml y guárdelo:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="translationHistory">Translation History</string>
    <string name="ApplicationName">Phoneword</string>
</resources>

El texto del botón Translation History (Historial de traducciones) debería actualizarse para reflejar el nuevo valor de cadena:

El botón refleja el nuevo valor de cadena

Con el botón Translation History (Historial de traducciones) seleccionado en la superficie de diseño, abra la pestaña Comportamiento en el Panel de propiedades y haga doble clic en la casilla Habilitado para deshabilitar el botón. Esto hará que el botón se vuelva más oscuro en la superficie de diseño:

Deshabilitar el botón Translation History (Historial de traducciones)

Creación de la segunda actividad

Cree una segunda actividad para activar la segunda pantalla. En el Panel de solución, haga clic en el icono de engranaje de color gris junto al proyecto Phoneword y seleccione Agregar > Nuevo archivo...:

En el cuadro de diálogo Nuevo archivo, elija Android > Actividad, asigne a la actividad el nombre TranslationHistoryActivity y haga clic en Agregar.

Reemplace el código de plantilla de TranslationHistoryActivity por lo siguiente:

using System;
using System.Collections.Generic;
using Android.App;
using Android.OS;
using Android.Widget;
namespace Phoneword
{
    [Activity(Label = "@string/translationHistory")]
    public class TranslationHistoryActivity : ListActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            // Create your application here
            var phoneNumbers = Intent.Extras.GetStringArrayList("phone_numbers") ?? new string[0];
            this.ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, phoneNumbers);
        }
    }
}

En esta clase, se crea una ListActivity y se rellena mediante programación, por lo que no es necesario crear un nuevo archivo de diseño para esta actividad. Esto se explica con más detalle en la Hello, Android Multiscreen: análisis detallado.

Adición de una lista

Esta aplicación recopila números de teléfono (que el usuario ha traducido en la primera pantalla) y los pasa a la segunda pantalla. Los números de teléfono se almacenan como una lista de cadenas. Para admitir listas (y también Intents, que se usan más adelante), agregue las directivas using siguientes a la parte superior de MainActivity.cs:

using System.Collections.Generic;
using Android.Content;

Después, cree una lista vacía que se pueda rellenar con números de teléfono. La clase MainActivity tendrá este aspecto:

[Activity(Label = "Phoneword", MainLauncher = true)]
public class MainActivity : Activity
{
    static readonly List<string> phoneNumbers = new List<string>();
    ...// OnCreate, etc.
}

En la clase MainActivity, agregue el código siguiente para registrar el botón TranslationHistory (coloque esta línea después de la declaración TranslationHistoryButton):

Button translationHistoryButton = FindViewById<Button> (Resource.Id.TranslationHistoryButton);

Agregue el código siguiente al final del método OnCreate para conectar el botón Translation History (Historial de traducciones):

translationHistoryButton.Click += (sender, e) =>
{
    var intent = new Intent(this, typeof(TranslationHistoryActivity));
    intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
    StartActivity(intent);
};

Actualice el botón Traducir para agregar el número de teléfono a la lista de phoneNumbers. El controlador Click de TranslateHistoryButton debería ser similar al código siguiente:

translateButton.Click += (sender, e) =>
{
    // Translate user's alphanumeric phone number to numeric
    translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text);
    if (string.IsNullOrWhiteSpace(translatedNumber))
    {
        translatedPhoneWord.Text = "";
    }
    else
    {
        translatedPhoneWord.Text = translatedNumber;
        phoneNumbers.Add(translatedNumber);
        translationHistoryButton.Enabled = true;
    }
};

Ejecución de la aplicación

Implemente la aplicación en un dispositivo o emulador. En las siguientes capturas de pantalla se muestra la aplicación Phoneword en ejecución:

Capturas de pantalla de ejemplo

Enhorabuena por completar su primera aplicación multipantalla de Xamarin.Android. Ahora es el momento de analizar minuciosamente las herramientas y los conocimientos que acaba de aprender: a continuación Análisis detallado de Hello, Android Multiscreen.