Share via


Hello, Android Multiscreen: guida introduttiva

Questa guida in due parti consente di ampliare l'applicazione Phoneword per gestire una seconda schermata. Nel corso della trattazione, è stato introdotto il concetto fondamentale dei blocchi predefiniti per le applicazioni Android, con un approfondimento dell'architettura Android.

Nella parte dettagliata di questa guida si aggiungerà una seconda schermata all'applicazione Telefono word per tenere traccia della cronologia dei numeri tradotti usando l'app. L'applicazione finale avrà una seconda schermata che visualizzerà i numeri che sono stati "convertiti", come illustrato nello screenshot a destra:

Screenshot dell'app di esempio

L'approfondimento associato consente di rivedere ciò che è stato fatto e illustra l'architettura, lo spostamento e altri concetti nuovi di Android incontrati durante la trattazione.

Requisiti

Questa guida inizia dal punto in cui Hello, Android termina. È quindi necessario aver completato Hello, Android: guida introduttiva.

scenario

In questa procedura dettagliata si aggiungerà la schermata Translation History (Cronologia delle conversioni) per l'applicazione Phoneword.

Per iniziare, aprire l'applicazione Phoneword in Visual Studio e modificare Main.axml da Esplora soluzioni.

Suggerimento

Le versioni più recenti di Visual Studio supportano l'apertura dei file con estensione xml all'interno di Android Designer.

I file con estensione axml e xml sono entrambi supportati in Android Designer.

Aggiornamento del layout

Dalla Casella degli strumenti trascinare un oggetto Pulsante nell'area di progettazione, posizionandolo sotto l'oggetto TextView TranslatedPhoneWord. Nel riquadro Proprietà modificare la proprietà Id del pulsante in @+id/TranslationHistoryButton

Trascinare un nuovo pulsante

Impostare la proprietà Testo del pulsante su @string/translationHistory. Android Designer interpreterà questa istruzione in modo letterale, ma con poche modifiche il testo del pulsante verrà visualizzato correttamente:

Impostare il testo del pulsante della cronologia delle conversioni

Espandere il nodo values nella cartella Risorse in Esplora soluzioni e fare doppio clic sul file di risorse stringa, Strings.xml:

Aprire Strings.xml

Aggiungere il nome e il valore della stringa translationHistory al file Strings.xml e salvarlo:

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

Il testo del pulsante Translation History (Cronologia delle conversioni) dovrebbe aggiornarsi per riflettere il nuovo valore della stringa:

Il pulsante riflette il nuovo valore della stringa

Dopo aver selezionato il pulsante Translation History (Cronologia delle conversioni) nell'area di progettazione, individuare l'impostazione enabled nel riquadro Proprietà e impostarne il valore su false per disabilitare il pulsante. Il pulsante diventerà più scuro all'interno dell'area di progettazione:

Disabilitare il pulsante della cronologia delle conversioni

Creazione della seconda attività

Creare una seconda attività per consentire il funzionamento della seconda schermata. Nella Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto Telefono word e scegliere Aggiungi > nuovo elemento...:

Aggiungere un nuovo file

Nella finestra di dialogo Aggiungi nuovo elemento scegliere Attività Visual C# > e assegnare al file attività il nome TranslationHistoryActivity.cs.

Sostituire il codice del modello in TranslationHistoryActivity.cs con quanto segue:

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);
        }
    }
}

In questa classe si sta creando e popolando un oggetto ListActivity a livello di codice. Non è quindi necessario creare un nuovo file di layout per questa attività. Questo aspetto viene trattato più dettagliatamente in Hello, Android Multiscreen: approfondimenti.

Aggiunta dell'elenco

Questa app raccoglie i numeri di telefono che l'utente ha convertito nella prima schermata e li passa alla seconda schermata. I numeri di telefono vengono archiviati sotto forma di elenco di stringhe. Per il supporto di elenchi e Intent, usati più avanti, aggiungere le direttive using seguenti all'inizio di MainActivity.cs:

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

Creare quindi un elenco vuoto che possa essere compilato con numeri di telefono. La classe MainActivity avrà l'aspetto seguente:

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

Nella classe MainActivity aggiungere il codice seguente per registrare il pulsante Translation History (Cronologia delle conversioni). Inserire questa riga dopo la dichiarazione di translateButton:

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

Aggiungere il codice seguente alla fine del metodo OnCreate per associare il pulsante Translation History (Cronologia delle conversioni):

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

Aggiornare il pulsante Translate (Converti) per aggiungere il numero di telefono all'elenco phoneNumbers. Il gestore Click per translateButton deve essere simile al codice seguente:

// 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;
    }
};

Salvare e compilare l'applicazione per verificare che non ci siano errori.

Esecuzione dell'app

Distribuire l'applicazione in un emulatore o in un dispositivo. Gli screenshot seguenti illustrano l'applicazione Phoneword in esecuzione:

Screenshot di esempio

Per iniziare, aprire il progetto Phoneword in Visual Studio per Mac e modificare Main.axml dal riquadro della soluzione.

Suggerimento

Le versioni più recenti di Visual Studio supportano l'apertura dei file con estensione xml all'interno di Android Designer.

I file con estensione axml e xml sono entrambi supportati in Android Designer.

Aggiornamento del layout

Dalla Casella degli strumenti trascinare un oggetto Pulsante nell'area di progettazione, posizionandolo sotto l'oggetto TextView TranslatedPhoneWord. Nel riquadro delle proprietà modificare la proprietà Id del pulsante in @+id/TranslationHistoryButton:

Trascinare un nuovo pulsante

Impostare la proprietà Testo del pulsante su @string/translationHistory. Android Designer interpreterà questa istruzione in modo letterale, ma con poche modifiche il testo del pulsante verrà visualizzato correttamente:

Impostare il testo del pulsante della cronologia delle conversioni

Espandere il nodo values nella cartella Risorse nel riquadro della soluzione e fare doppio clic sul file di risorse stringa, Strings.xml:

Aprire Strings

Aggiungere il nome e il valore della stringa translationHistory al file Strings.xml e salvarlo:

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

Il testo del pulsante Translation History (Cronologia delle conversioni) dovrebbe aggiornarsi per riflettere il nuovo valore della stringa:

Il pulsante riflette il nuovo valore della stringa

Dopo aver selezionato il pulsante Translation History (Cronologia delle conversioni) nell'area di progettazione, aprire la scheda Comportamento nel riquadro delle proprietà e fare doppio clic sulla casella di controllo Abilitato per disabilitare il pulsante. Il pulsante diventerà più scuro all'interno dell'area di progettazione:

Disabilitare il pulsante della cronologia delle conversioni

Creazione della seconda attività

Creare una seconda attività per consentire il funzionamento della seconda schermata. Nel riquadro della soluzione fare clic sull'icona a forma di ingranaggio grigia accanto al progetto Telefono word e scegliere Aggiungi > nuovo file...:

Nella finestra di dialogo Nuovo file scegliere Attività Android>, assegnare un nome all'attività TranslationHistoryActivitye quindi fare clic su Aggiungi.

Sostituire il codice del modello in TranslationHistoryActivity con quanto segue:

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);
        }
    }
}

In questa classe si sta creando e popolando un oggetto ListActivity a livello di codice. Non è quindi necessario creare un nuovo file di layout per questa attività. Questo aspetto viene spiegato più dettagliatamente in Hello, Android Multiscreen: approfondimenti.

Aggiunta dell'elenco

Questa app raccoglie i numeri di telefono che l'utente ha convertito nella prima schermata e li passa alla seconda schermata. I numeri di telefono vengono archiviati sotto forma di elenco di stringhe. Per il supporto di elenchi e Intent, usati più avanti, aggiungere le direttive using seguenti all'inizio di MainActivity.cs:

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

Creare quindi un elenco vuoto che possa essere compilato con numeri di telefono. La classe MainActivity avrà l'aspetto seguente:

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

Nella classe MainActivity aggiungere il codice seguente per registrare il pulsante Translation History (Cronologia delle conversioni). Inserire questa riga dopo la dichiarazione di TranslationHistoryButton:

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

Aggiungere il codice seguente alla fine del metodo OnCreate per associare il pulsante Translation History (Cronologia delle conversioni):

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

Aggiornare il pulsante Translate (Converti) per aggiungere il numero di telefono all'elenco phoneNumbers. Il gestore Click per TranslateHistoryButton deve essere simile al codice seguente:

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;
    }
};

Esecuzione dell'app

Distribuire l'applicazione in un emulatore o in un dispositivo. Gli screenshot seguenti illustrano l'applicazione Phoneword in esecuzione:

Screenshot di esempio

L'applicazione Xamarin.Android multischermata è stata completata. Ora è il momento di dissezionare gli strumenti e le competenze appena apprese: accanto a Hello, Android Multiscreen Deep Dive.