Fondamenti di sviluppo mobile su Android - Dott. A. Tedeschi Corso di - Area Sistemi Informativi

Pagina creata da Samuele Mauri
 
CONTINUA A LEGGERE
Fondamenti di sviluppo mobile su Android - Dott. A. Tedeschi Corso di - Area Sistemi Informativi
Fondamenti di sviluppo mobile su
                             Android

                                 Dott. A. Tedeschi
                           antonio.tedeschi@uniroma3.it

                                   Corso di
                           Telecomunicazioni Wireless
                                 a.a. 2016-2017
© A. Tedeschi 2016/2017                                   1
Fondamenti di sviluppo mobile su Android - Dott. A. Tedeschi Corso di - Area Sistemi Informativi
Outline

      •        Fondamenti di programmazione Android
             •        Creare un nuovo progetto
             •        Struttura del progetto
             •        Struttura di un file apk
             •        Activity lifecycle
             •        Intent e la comunicazione tra activity e
                      applicazioni
             •        Emulatore

© A. Tedeschi 2016/2017                                          2
Fondamenti di sviluppo mobile su Android - Dott. A. Tedeschi Corso di - Area Sistemi Informativi
DEMO

                          Demo

© A. Tedeschi 2016/2017          3
Fondamenti di sviluppo mobile su Android - Dott. A. Tedeschi Corso di - Area Sistemi Informativi
Android: La prima app
    Recap
    Creazione di un nuovo progetto
    Android Studio -> Start a new Android Studio project

© A. Tedeschi 2016/2017                                    4
Fondamenti di sviluppo mobile su Android - Dott. A. Tedeschi Corso di - Area Sistemi Informativi
Android: La prima app

© A. Tedeschi 2016/2017   5
Fondamenti di sviluppo mobile su Android - Dott. A. Tedeschi Corso di - Area Sistemi Informativi
Android: La prima app

© A. Tedeschi 2016/2017   6
Fondamenti di sviluppo mobile su Android - Dott. A. Tedeschi Corso di - Area Sistemi Informativi
Android: La prima app

© A. Tedeschi 2016/2017   7
Android: La prima app

© A. Tedeschi 2016/2017   8
Android: La prima app
Recap
Creazione di un nuovo progetto:
   Android Studio -> Start a new Android Studio project

Impostare opportunamente:
• I nomi dell’app, del progetto e in particolare del package(!).
   NOTA
   com.example.NAME è il nome di default del package è
   consigliabile cambiarlo
• La versione minima e target delle API.
   Ciò permette di definire la retrocompatibilità di un’app e le API
   che possono essere adottate.

© A. Tedeschi 2016/2017                                                9
Android: Struttura del progetto
  Organizzazione del progetto e struttura dei file

  Android Studio propone diverse view come
  accade per Eclipse ognuna delle quali ci permette
  di visualizzare un determinato set cartelle e dati

  Di default, alla creazione di un nuovo progetto
  viene mostrata la vista Android project view, che:
  • mostra una versione ridotta del progetto
     mostrando solo i file e le cartelle principali
  • Raggruppa i file di build per tutti i moduli in
     un’unica cartella
  • Raggruppa i file di manifest per ogni modulo
     in un’unica cartella

  Android Studio permette la gestione dei Moduli, che possono essere
  applicazioni (mobile devices, TV, …), librerie e test
© A. Tedeschi 2016/2017                                                10
Android: Struttura del progetto
                          gradle
                          • Si tratta di un prodotto di build automation diffuso nel
                             mondo Java. L’omonima cartella contiene i gradler-wrapper
                             file

                          .idea
                          • È la cartella in cui sono memorizzati i setting di IntelliJ IDEA
                          Nota: Android Studio si basa su IntelliJ

                          External Libraries
                          • Contiene al suo interno un set di librerie necessarie per lo
                             sviluppo dell’app.
                          • appcompat_v7
                               • Libreria di supporto auto-importata alla creazione di
                                  un progetto in cui si crea un nuovo progetto
                               • Permette retrocompatibilità di elementi presenti nelle
                                  recenti versioni, come ActionBar, utilizzabili dalla
                                  versione 2.1 e superiori
                          • support-v4.jar permette l’utilizzo dei fragment dalla
                             versione 1.6 e superiori (info)
                          • design-23.1.0 libreria di supporto per la definizione di alcuni
© A. Tedeschi 2016/2017      elementi material design                                    11
Android: Struttura del progetto
                          build
                          • Memorizza l’output della compilazione di tutti i moduli del
                             progetto

                          build.grade
                          • Permette di customizzare le proprietà per la compilazione
                             del sistema. Possibile usare le impostazioni di default

                          gradlew e gradlew.bat
                          • Startup script del gradel per i sistemi Unix e Windows,
                             rispettivamente

                          local.properties
                          • Permette di settare le proprietà specifiche del calcolatore
                             per fare la build del sistema, ad esempio il path della SDK
                             installata.

                          .iml
                          • File del modulo creato da IntelliJ IDEA per memorizzare le
                             informazioni sul modulo

                          settings.gradle
                          • Specifica i sotto-progetti da compilare                        12
© A. Tedeschi 2016/2017
Android: Struttura del progetto
                          assets
                          • Cartella base vuota
                          • È possibile utilizzarla per integrare nell’applicazione risorse
                             primarie, come: font custom, database sqlite per lo storage
                             dei dati, molteplici tipologie di file da utilizzare
                             nell’applicazione.
                          • Possibile navigare questa cartella come un file system
                             attraverso l’AssetManager
                          • Tale cartella non è inserita di default nella creazione del
                             progetto, va aggiunta manualmente (tasto destro sul nome
                             del progetto -> New -> Folders -> Assets Folder

                          output
                          • Directory di output della compilazione
                          • Al suo interno è presente il file .apk ottenuto dalla
                             compilazione del codice e delle risorse comprese quelle
                             contenute in assets

                          libs
                          • Cartella in cui è consigliato inserire le librerie private che
© A. Tedeschi 2016/2017
                               varranno impiegate nell’applicazione                          13
Android: Struttura del progetto
                                                                           Classe responsabile
                                                                              della Grafica

                                                 public static final class drawable {
                                                    public static final int
                                                        ic_launcher = 0x7f020000;
                                                 }

                                                  «Oggetto» grafico che    Valore numerico univoco
                                                  si vuole rappresentare   che identifica «l’oggetto»

  Senza questo file Android non sarebbe in grado di effettuare le associazioni tra
  gli elementi che compongono l’activity dal punto di vista grafico (layout,
  immagini, bottoni, … ) e il codice Java dell’activity stessa.

                          R.java non va MAI modificato manualmente! È compito del compilatore
                          aggiungere o rimuovere classi o attributi. Quando si importa un progetto è
                          possibile che questo file non sia presente o non venga generato
© A. Tedeschi 2016/2017   correttamente -> fare Clean & Build del progetto manualmente           14
Android: Struttura del progetto
                          app
                          • Contiene il sorgente dell’applicazione non
                            solo in termini di codice Java ma anche di
                            gestione delle risorse

                          AndroidManifest.xml
                          • Generato automaticamente alla creazione del
                            progetto

                          • Permette la definizione:
                             • delle Activity per renderle utilizzabili dal
                               sistema
                              • nome dell’applicazione
                              • dei permessi, come accesso ad internet,
                                localizzazione, etc

© A. Tedeschi 2016/2017                                                       15
Android Manifest
    How to…
    •      Definire una activity in portrait
           
    •      Impostare una activity come principale
           
    •      Aggiungere un permesso
    
© A. Tedeschi 2016/2017                                                         16
Android: Struttura del progetto
                          Java
                          • codice sorgente come le Activity
                          • logica di business dell’applicazione

                          res
                          • Contiene diverse tipologie di risorse, quali immagini,
                             layout, file xml per definire le stringhe statiche,
                             animazioni, ecc.

                          Gradle Scripts
                          • Al suo interno ci sono due file build.gradle:
                            uno generale per tutto il progetto ed uno più specifico
                            per ogni modulo che stiamo sviluppando
                          • build.gradle (Module: app) contiene al suo interno le
                            dipendenze e le configurazioni di default dell’app.
                            Ad esempio: minSdkVersion, targetVersion,
                            versionCode.

                            NOTA: queste informazioni sono state rimosse
                            dall’AndroidManifest alleggerendolo

© A. Tedeschi 2016/2017                                                               17
Android: Struttura del progetto
                          drawable-LAYOUT
                          sono le cartelle in cui inserire la grafica in base alla
                          qualità dello schermo che si desidera supportare.
                          • Se la grafica non è definita per ogni risoluzione,
                             Android effettuerà il resize automatico a partire
                             dalla risoluzione più vicina a quella che deve
                             essere finita.
                          • Possibili effetti collaterali come immagini sgranate
                             o troppo piccole
                          • Le cartelle drawable a diverse risoluzioni non
                             sono create di default, ma possono essere create

                          values: contiene diversi file xml per la definizione
                          • stile dell’applicazione (style.xml)
                          • dimensioni di margini dei layout, widget (es.
                             TextView) o font (dimens.xml)
                          • definizione delle stringe statiche della
                             applicazione in una lingua di base scelta
                             (string.xml)
© A. Tedeschi 2016/2017                                                          18
Android: Struttura del progetto
                          anim
                          • Contiene file XML per la creazione e gestione delle
                             animazioni
                          color
                          • se necessario è possibile specificare colori non
                             standard non offerti da Android
                          xml
                          • Insieme di file XML che possono essere utili per la
                            configurazione di alcuni componenti
                            dell’applicazione
                          mipmap
                          • è la cartella per le icone dell’app e permette al
                            sistema di scegliere in base alla risoluzione del
                            dispositivo l’icona opportuna. Rimpiazza la cartella
                            drawable per le icone
                          raw
                          • Alternativa alla cartella assets. I file contenuti sono
© A. Tedeschi 2016/2017      gestiti dall’Android Asset Packaging Tool             19
Android: Struttura del progetto
                          layout:
                          • contiene un insieme di file XML che
                             rappresentano l’interfaccia grafica
                             dell’applicazione.
                          • Attenzione layout permette la gestione della
                             grafica dell’applicazione ma spesso è necessarie
                             creare ulteriori cartelle dal nome layout-
                             RISOLUZIONE per gestire opportunamente una
                             data risoluzione.

                          menu
                          • Contiene un insieme di file XML relativi ai menu
                            impiegati nelle singole activity dell’applicazione.
                          • Prende il nome dell’activity se questa è creata
                            automaticamente.
                          • Dalla versione 3.0 serve per gestire anche le
                            ActionBar

© A. Tedeschi 2016/2017                                                           20
Android: Emulatore
Contro
• Lento (a volte molto) specie con laptop non prestanti
• Presenta bug
• Le ultime versioni (API 17 e superiori) richiedono Intel HAXM (Hardware
  Accelerator Execution Manager) per rendere più performante l’emulatore
  attraverso la virtualizzazione (da attivare dal Bios) non sempre disponibile nei
  propri laptop. Problema: se attivo Hyper-V, HAXM non viene installato e
  l’emulatore non viene eseguito (per Windows, Mac, Linux). Soluzione: scegliere
  quale dei due abilitare ogni volta oppure creare due opzioni di boot (guida)
Pro
• Possibilità di ricreare situazioni particolari, come la localizzazione, ricezione
   chiamate e messaggi
• Permette la verifica del comportamento della nostra applicazione
• Possibilità di creare device con risoluzione, qualità di schermo e versione
   dell’OS di nostro interesse al fine di testare la bontà dell’app dal punto di vista
   di compatibilità. Android Studio offre template di dispositivi già pronti
   all’utilizzo
© A. Tedeschi 2016/2017                                                             22
Android: Logcat
 • Il termine Log indica la registrazione cronologica delle operazioni
   man mano che vengono eseguite (Wikipedia).
 • Il termine Cat indica un comando dei sistemi operativi Unix e Unix-
   like che legge i file che gli sono specificati come parametri (o lo
   standard input) e produce sullo standard output la concatenazione
   del loro contenuto (Wikipedia).
 • I due termini uniti formano Logcat che indica il tracciamento
   cronologico delle operazioni con la relativa visualizzazione sullo
   standard output del sistema.

 Esempi reali:
    • Lista della spesa
    • Elenco delle chiamate ricevute ed effettuate, organizzate
      secondo un ordine cronologico

© A. Tedeschi 2016/2017                                                  23
Android: Logcat
  • iI logcat non è altro che un insieme di informazioni che ci permettono di
    ricordare o tracciare eventi nel passato
  • Ad ogni informazione può essere associato un livello (o meglio filtro), in
    modo da organizzare in modo gerarchico le informazioni. In particolare i
    livelli sono i seguenti:
      • V — Verbose (lowest priority)
      • D — Debug
      • I — Info
      • W — Warning
      • E — Error
      • F — Fatal
  • Tramite un analisi di questi dati e un apposito filtraggio per tag, PID o testo
    è possibile individuare la causa di errori o malfunzionamenti
    dell’applicazione.

                                Il logcat è nostro amico…
                                Imparare a usarlo salverà il nostro tempo…
© A. Tedeschi 2016/2017                                                           24
Struttura *.apk – build process

• Android Asset Packaging Tool (aapt) prende le
  risorse, come il manifest e gli xml, e li compila.
  Questo passo genera il file R.java

• aidl tool converte ogni interfaccia .aidl presente
  tra le interfacce Java

• Tutto il codice Java (comprese R.java e I file
  .aidl) sono compilati restituendo file .class

• dex tool converte i file .class in bytecode della
  Dalvik. Stessa cosa accade per le librerie incluse
  nel progetto

© A. Tedeschi 2016/2017                                25
Struttura *.apk – build process

• I file .dex, le risorse compilate e quelle non
  compilate sono inserite nell’Android PacKaging
  (apk)

• L’app viene firmata con la chiave di debug o di
  release

• Se l’app è stata fermata con la chiave release è
  necessario allineare l’apk con lo zipalign tool,
  diminuendo l’uso della memoria quando
  questa è in esecuzione

© A. Tedeschi 2016/2017                              26
Struttura *.apk
    Un file apk (Android Package) contiene tutte le informazioni
    necessarie per permettere l’esecuzione dell’applicazione creata
    (sia su dispostivi che su emulatore)

© A. Tedeschi 2016/2017                                               27
Activity
• Una activity in Android rappresenta una singola schermata di una
  app con cui l’utente si interfaccia.

• Un’app ha una o più activity, ma solo una activity per volta può
  essere visualizzata sullo schermo

• Una activity attraverso gli intent può richiamare altre activity

• Con Nugat 7.0 è possibile avere aperte contemporaneamente due
  Activity. Nelle versioni precedenti fatta eccezione di alcuni modelli
  come il Galaxy Note non era possibile

© A. Tedeschi 2016/2017                                              28
Activity: lifecycle
•       Le activity sono inserite in uno
        stack, back stack gestisto tramie
        LIFO
•       Quando una Activity in running
        richiama una nuova Activity,
        viene messa in pausa e stoppata
•       Il cambio di activity può anche
        avvenire per mano dell’utente
        (apre una nuova app) o a causa
        di un evento esterno (es.
        telefonata in arrivo)
•       L’utente può ibernare o
        ripristinare un’activity ma non
        può chiuderla
•       Terminazione gestita dal sistema
        ed è trasparente al developer

© A. Tedeschi 2016/2017                     29
Activity: lifecycle

 Approfondimenti: link
© A. Tedeschi 2016/2017   30
Activity: lifecycle
Esempio di comportamento del back stack gestito secondo l’approccio
Last In, First Out (LIFO) (link)

•    Quando un’activity corrente lancia una nuova activity, quella corrente viene messa in
     cima alla pila.
•    L’activity resta nella pila ed è stoppata
•    Quando una activity viene stoppata, il sistema mantiene in memoria lo stato corrente
     ad essa relativa
•    Cliccando sul tasto back, l’activity corrente viene tolta dalla pila (e distrutta dal
     sistema) ripristinando l’activity precedente
•    Iterando quest’ultima operazione si arriva fino all’activity di partenza dell’applicazione
     e se anche da qui viene cliccato il tasto back, si torna alla home deallocando del tutto
     l’app
© A. Tedeschi 2016/2017                                                                     31
Activity: lifecycle
  • protected void onCreate(android.os.Bundle savedInstanceState)
    Richiamato alla creazione dell’attività.
    setContentView() per assegnare un layout all’interfaccia utente
    L’argomento savedInstanceState serve per riportare un eventuale stato dell’attività
    salvato in precedenza da un’altra istanza che è stata terminata.
    L’argomento è null nel caso in cui l’attività non abbia uno stato salvato.
  • protected void onStart()
    Segnala che l’attività sta per diventare visibile sullo schermo
  • protected void onResume()
    Segnala che l’attività sta per iniziare l’interazione con l’utente
  • protected void onPause()
    Segnala che l’attività non sta più interagendo con l’utente
  • protected void onStop()
    Segnala che l’attività non è più visibile sullo schermo
  • protected void onRestart()
    Segnala che l’attività sta per essere riavviata, causa precedente arrestato
  • protected void onDestroy()
    Segnala che l’applicazione sta per essere terminata                                   32
© A. Tedeschi 2016/2017
Activity: lifecycle
    Questi metodi:
    • Sono annotati con @Override
    • possono essere riscritti dallo sviluppatore per
      specificarne il comportamento.
    • Non necessariamente devono essere specificati
      tutti (fatta eccezione per OnCreate)
    • Hanno come prima riga di codice il richiamo del
      metodo di base che si sta sovrascrivendo
      Es:
                  @Override
                  protected void onResume() {
                     super.onResume();
                     //proprio codice
                  }

© A. Tedeschi 2016/2017                                 33
DEMO

                          Demo

© A. Tedeschi 2016/2017          34
Intent

• Servono a comunicare ad Android che un certo evento sta per
  avvenire.
• Spesso vengono utilizzati per il lancio di una Activity
• Descrivono l’azione che si desidera compiere e fornisce i dati che
  vengono impiegati per compiere tale azione.

Possono essere:
• Espliciti: creazione e definizione della classe da eseguire

•   Impliciti: viene specificata l’azione ma il destinatario non è noto.
    Fondamentale per la collaborazione tra app diverse. Es:
    l’apertura PDF può essere eseguita da diverse app.

                                                                       35
Intent

•   Impliciti: viene specificata l’azione ma il destinatario non è noto.
    Fondamentale per la collaborazione tra app diverse

                   Ricerca di tutte le app
                   con il medesimo intent
                   filter
                                                                       36
Intent

• Per passare da un’activity ad un’altra (modalità esplicità)

    Intent intent = new Intent(this, FooActivity.class);
    startActivity(intent);

• Per far partire un’activity di cui non senza conoscere l’applicazione destinataria
  (modalità implicita). Fondamentale il filtro ACTION_SEND che deve essere
  presente e settato nell’applicazione destinataria.

    Intent intent = new Intent(Intent.ACTION_SEND);
    startActivity(intent);

• Possibilità di creare AppChooser per permettere all’utente di scegliere con
  quale app aprire l’oggetto inviato attraverso l’intent

                                                                                  37
Intent
• Ricezione di un intent implicito
   • Necessario dichiarare uno o più intent filters all’interno del manifest
      attraverso il tag 
   • In ogni filtro si deve specificare
       • action: dichiara il tipo di intent accettato, da specificare nell’attributo
           «name»
       • data: dichiara il tipo di dato accettato, usando uno o più attributi che
           specificano i vari aspetti dell’URI (host, port, path, ecc) e il MIME type
       • category: dichiara la categoria dell’intent accettato da specifiare
           nell’attributo name.
       • Esempio di intent filter che permette di ricevere un intent con
           ACTION_SEND
            
                                                                                    38
Intent

• Passaggio di dati tra due activity attraverso il metodo
  putExtra(..) di Intent

   intent.putExtra(name, value);
   startActivity(intent);

• Estrazione dei dati dall’activity di destinazione

   Intent intent = getIntent();
   intent.getStringExtra(name)

                                                            39
Intent
Esempio di intent per inviare una mail

    Intent intent= new Intent();

    String[] recipients = new String[]{"my@email.com"};

    intent.setAction(Intent.ACTION_SEND);
    intent.putExtra(Intent.EXTRA_TEXT, "testo da mostrare");
    intent.putExtra(Intent.EXTRA_EMAIL, recipients);
    intent.putExtra(Intent.EXTRA_SUBJECT, "Oggetto Email");
    intent.setType("text/plain");

    startActivity(intent);

                                                               40
Intent
Esempio di intent per inviare aprire una pagine web del browser .

    String url = "http://www.uniroma3.it";
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    startActivity(i);

Alternativamente
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    startActivity(i);

                                                                    41
Layout e grafica
Componente fondamentale dell’interfaccia grafica è la classe
android.view.View

In generale un oggetto View
• occupa una porzione rettangolare dello schermo
• è responsabile della creazione della grafica e della gestione degli
   eventi della porzione di schermo assegnata
• è la classe alla base dei widget (Button, check box, textview, ecc)

Progettato il layout di una certa activity, ossia la View, è possibile
mostrarla all’utente finale dell’applicazione attraverso il metodo
della classe Activity

                     public void setContentView(View view)

© A. Tedeschi 2016/2017                                                  42
Layout e grafica

FrameLayout
definito per bloccare in una certa area dello schermo un singolo oggetto. Non
sempre utilizzato perché non permette un buon adattamento alle altre
risoluzioni di schermo. Permette di aggiungere comunque dei nodi figli (widget
o altro) la cui posizione deve essere gestita opportunamente attraverso le
proprietà offerte da Android come android:layout_gravity

TableLayout
posiziona gli oggetti in righe e colonne, senza mostrare bordi. Una singola riga
è rappresentata da un oggetto di tipo TableRow in cui inserire i widget

© A. Tedeschi 2016/2017                                                            43
Layout e grafica
RelativeLayout
consente ai figli di specificare la propria posizione relativamente alla View
genitore o ad altri figli. Offre un’ottima gestione nel posizionamento dei suoi
nodi attraverso opportune proprietà

LinearLayout
allinea tutti gli oggetti orizzontalmente o verticalmente a seconda del valore
dell'attributo orientation.
I figli sono posizionabili mediante la proprietà gravity.
Definisce due proprietà fondamentali weightsum da utilizzare all’interno del
LinearLayout e weight da usare su i figli. Tramite queste è possibile posizionare
gli elementi del layout affinché occupino sempre la medesima posizione nelle
schermate.

© A. Tedeschi 2016/2017                                                             44
Layout e grafica
     Esempio di definizione di un layout

        //QUI VANNO INSERITI GLI ELEMENTI CHE SI DESIDERA MOSTRARE ALL’UTENTE

© A. Tedeschi 2016/2017                                                         45
Layout e grafica
Widget componenti di base per l’interazione con l’utente
Ne esistono diversi e sono tutti disponibili al programmatore attraverso il
package android.widget
Estendono la classe View                  
(android:nomepro=valore) che ne
definiscono la posizione, la grandezza,   

© A. Tedeschi 2016/2017                                                              46
Layout e grafica
I widget e i layout permettono adottano delle unità di misura per
stabilire lo spazio occupato o la grandezza del font

Queste sono rappresentate dai seguenti acronimi
  • px = pixel, attuali sullo schermo
  • sp = scale-independent pixels
      • adottato per la dimensione del font
  • dip | dp = Density-independent pixels
      • si basa sulla desità fisica dello schermo
      • 1 px = 160dp, tale rapporto cambia in base alla densità
         dello schermo
      • È adottato per definire le grandezze delle immagini, del
         padding, del layout, ecc
© A. Tedeschi 2016/2017                                             47
DEMO

                          Demo

© A. Tedeschi 2016/2017          48
Layout e grafica
 Problema
 A causa della molteplicità dei dispositivi mobili in circolazione (oltre i 2000 con
 caratteristiche hardware e software differenti tra loro) è necessario gestire
 opportunamente la grafica.

 Soluzione
 • Creare opportunamente il layout grafico principale adottando il RelativeLayout
   ove possibile e necessario
 • Supportare le diverse soluzioni di schermo, creando nuovi layout con layout-
   RISOLUZIONE. Es: layout-ldpi
 • Supportare le diverse versioni della piattaforma Android
 • Popolare opportunamente le cartelle drawable-RISOLUZIONE, che differiscono
   tra loro per la risoluzione dell’immagine

 Il sistema automaticamente in base alla caratteristiche del dispositivo selezionerà il
 layout e le immagini opportune per garantire la migliore esperienza utente.

 Approfondimenti
 http://developer.android.com/guide/practices/screens_support.html

© A. Tedeschi 2016/2017                                                                   49
DEMO

       Demo

              50
App Multilingua
 Per creare un’applicazione multilingua è necessario compiere i seguenti
 passi:
 • Definire opportunamente in lingua inglese il contenuto del file
    string.xml presente nella cartella values
 • Creare una o più cartelle values-LINGUA, dove LINGUA è
    l’abbreviazione della lingua che si desidera supportare es: Italiano =
    it; Spagnolo = es; ecc…
 • Copiare e incollare il file string.xml presente in values e incollarlo
    all’interno della cartella values-LINGUA che avete creato.
 • Aggiornate opportunamente il file con i valori corretti di lingua.

 Android automaticamente riconoscerà che l’applicazione supporta più
 lingue e pertanto selezionerà la lingua che corrisponde con quella del
 telefono.
 Se così non fosse Android utilizzerà la lingua di default, ossia l’inglese.

 NOTA: quanto descritto è valido solo per contenuti testuali statici
© A. Tedeschi 2016/2017                                                        51
Puoi anche leggere