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:
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
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:
Espandere il nodo values nella cartella Risorse in Esplora soluzioni e fare doppio clic sul file di risorse stringa, 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:
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:
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...:
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:
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
:
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:
Espandere il nodo values nella cartella Risorse nel riquadro della soluzione e fare doppio clic sul file di risorse stringa, 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:
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:
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à TranslationHistoryActivity
e 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:
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.