Nella precedente lezione abbiamo utilizzato una serie di viste di base che possiamo utilizzare per la realizzazione delle nostre applicazioni Android. Esistono molte altre viste e adesso andremo a vederne alcune.
TimePicker
Selezionare una data e un orario รจ una delle attivitร piรน comuni da effettuare in unโapplicazione mobile. Android supporta questa funzionalitร tramite le viste TimePicker e DatePicker. Per analizzare il funzionamento della vista TimePicker creiamo un nuovo progetto Android denominato TestView2.
Andiamo a modificare il file activity_main.xml nel modo seguente
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TimePicker android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button android:id="@+id/btnSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Visualizza orario"
android:onClick="onClick" />
</LinearLayout>
Selezioniamo il progetto ed effettuiamo il debug sullโemulatore.
Il risultato รจ il seguente
Possiamo cambiare lโorario selezionando lโora o i minuti in alto e spostando il cerchietto rosso.
Adesso andiamo a modificare il file MainActivity.java inserendo il codice per la gestione dellโevento click del button
package com.example.test.testview2;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;
public class MainActivity extends Activity {
TimePicker timePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timePicker = (TimePicker) findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
}
public void onClick(View view) {
Toast.makeText(getBaseContext(),
"Orario:" +
timePicker.getCurrentHour() +
":" + timePicker.getCurrentMinute(),
Toast.LENGTH_SHORT).show();
}
}
Avviando nuovamente lโapplicazione sullโemulatore e cliccando sul button verrร in questo modo visualizzato un messaggio con lโorario attualmente selezionato. Vi faccio notare che questa volta la vista mostra lโorario in formato 24 ore a differenza del passaggio precedente in cui esso veniva mostrato in formato AM/PM. Questo perchรฉ nella classe java relativa alla nostra activity abbiamo utilizzato il metodo setIs24HourView. Inoltre vi faccio notare che il valore dellโora e del minuto corrente si ottengono tramite i metodi getCurrentHour e getCurrentMinute.
DatePicker
La vista DatePicker, molto simile alla TimePicker, consente di selezionare una data allโinterno di unโactivity. Andiamo a modificare il file activity_main.xml del progetto TestView2 nel modo seguente
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:ignore="HardcodedText" >
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btnSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Visualizza data" />
</LinearLayout>
Avviando lโapplicazione sullโemulatore il risultato sarร il seguente
Adesso andiamo a modificare il file MainActivity.java nel modo seguente
package com.example.test.testview2;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.Toast;
public class MainActivity extends Activity {
DatePicker datePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
datePicker = (DatePicker) findViewById(R.id.datePicker);
}
public void onClick(View view) {
Toast.makeText(getBaseContext(),
"Data:" + (datePicker.getMonth() + 1) +
"/" + datePicker.getDayOfMonth() +
"/" + datePicker.getYear() + "n",
Toast.LENGTH_SHORT).show();
}
}
Riavviando lโapplicazione e cliccando sul pulsante il risultato sarร la visualizzazione della data correntemente selezionata
In questo caso i valori di giorno, mese ed anno si ottengono chiamando il metodo getDayOfMonth, getMonth e getYear.
ListView
Spesso allโinterno di unโapplicazione si presenta la necessitร di visualizzare una lunga lista di elementi. A tale scopo Android mette a disposizione due tipi di vista, ListView e SpinnerView. La ListView permette di visualizzare una sequenza di elementi in una lista verticale scorrevole. Per analizzarne il funzionamento creiamo un nuovo progetto Android denominato TestList.
Andiamo a modificare il file MainActivity.java nel modo seguente
package com.example.test.testlist;
import android.os.Bundle;
import android.app.ListActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends ListActivity {
String[] squadre = {
"Juventus",
"Milan",
"Inter",
"Roma",
"Lazio",
"Torino",
"Sampdoria",
"Genoa",
"Bologna",
"Sassuolo"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, squadre));
}
public void onListItemClick(
ListView parent, View v, int position, long id)
{
Toast.makeText(this,
"La squadra selezionata รจ: " + squadre[position],
Toast.LENGTH_SHORT).show();
}
}
In questo modo avviando lโapplicazione visualizziamo lโelenco delle squadre che abbiamo definito e cliccando su una di esse viene mostrato il messaggio impostato nel metodo onListitemClick
La prima cosa da sottolineare in questo esempio รจ che la classe MainActivity estende la classe ListActivity, la quale consente di visualizzare una lista di elementi collegata ad una origine dati. Altra cosa da notare รจ che non รจ necessario modificare il file activity_main.xml per dichiarare la ListView, perchรฉ la classe ListActivity contiene essa stessa una ListView. Per tale motivo nel metodo onCreate non รจ necessario chiamare il metodo setContentView per il caricamento dellโinterfaccia utente tramite il file activity_main.xml.
Allโinterno del metodo onCreate abbiamo utilizzato il metodo setListAdapter per popolare la ListView di elementi (in questo caso nomi di squadre di calcio). Lโoggetto ArrayAdapter gestisce lโarray di stringhe che viene poi visualizzato allโinterno della ListView.
Una ListView permette dunque di visualizzare una lista piรน o meno lunga di elementi ma a volte si puรฒ presentare la necessitร di visualizzare altre viste nella stessa interfaccia utente e quindi non รจ possibile utilizzare un controllo che copra lโintero schermo. In questi casi si puรฒ utilizzare la SpinnerView, una vista che consente di visualizzare un elemento alla volta di una lista e consente allโutente di scegliere quale elemento visualizzare.
SpinnerView
Per capire il funzionamento di questa vista creiamo un nuovo progetto Android denominato TestSpinnerList e andiamo a modificare il file activity_main.xml nel modo seguente
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true" />
</LinearLayout>
Andiamo a modificare il file strings.xml, posizionato nella cartella res/values, aggiungendo un elemento string-array contenente le stringhe da visualizzare successivamente nella SpinnerView
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">TestSpinnerView</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string-array name="numeri_array">
<item>Uno</item>
<item>Due</item>
<item>Tre</item>
<item>Quattro</item>
<item>Cinque</item>
<item>Sei</item>
<item>Sette</item>
<item>Otto</item>
</string-array>
</resources>
Adesso andiamo a modificare il file MainActivity.java nel modo seguente
package com.example.test.testspinnerlist;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends Activity {
String[] numeri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
numeri = getResources().getStringArray(R.array.numeri_array);
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, numeri);
s1.setAdapter(adapter);
s1.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0,
View arg1, int arg2, long arg3)
{
int index = arg0.getSelectedItemPosition();
Toast.makeText(getBaseContext(),
"Elemento selezionato: " + numeri[index],
Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) { }
});
}
}
Avviando lโapplicazione sullโemulatore e cliccando sulla SpinnerView ci viene mostrato un elenco degli elementi contenuti al suo interno e selezionandone uno ci viene mostrato il relativo messaggio
Rispetto a quanto visto per la ListView un evento da gestire in piรน รจ onNothingSelect. Questo evento si verifica quando lโutente preme il pulsante back e in questo caso non viene selezionato alcun elemento, quindi non รจ necessario intraprendere alcuna azione.