• Like
Programmazione mobile: ANDROID
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Programmazione mobile: ANDROID

  • 252 views
Published

Seconda lezione: attività e layout

Seconda lezione: attività e layout

Published in Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
252
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
16
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ITIS Max Planck di Lancenigo diVillorba (TV) A.S. 2013-2014 Prof. PAOLOTOSATO Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Programmazione mobile: ANDROID Seconda lezione: attività e layout
  • 2. 23/04/2014 2 • Le attività • Layout • In Java • InXML Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Indice
  • 3. 23/04/2014 3 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Le attività Componenti di un’applicazione Android che fanno uso del display e che interagiscono con l’utente (~ finestra). Classe che estende android.app.Activity. Hanno carattere di esclusività: soltanto un’attività alla volta può occupare il display. La distruzione delle attività è completamente demandata al sistema: si possono ibernare ma non chiudere.
  • 4. 23/04/2014 4 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Le attività Metodi di Activity eseguiti durante i passaggi di stato di un’attività package esempi.ciaomondo; import android.util.Log; public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // … } protected void onRestart() { super.onRestart(); Log.i("Activity", "Richiamato onRestart()"); } protected void onStart() { super.onStart(); Log.i("Activity", "Richiamato onStart()"); } protected void onResume() { super.onResume(); Log.i("Activity", "Richiamato onResume()"); } protected void onPause() { super.onPause(); Log.i("Activity", "Richiamato onPause()"); } protected void onStop() { super.onStop(); Log.i("Activity", "Richiamato onStop()"); } protected void onDestroy() { super.onDestroy(); Log.i("Activity", "Richiamato onDestroy()"); } }
  • 5. 23/04/2014 5 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Le attività Esempio sotto-attività: attività principale public class MainActivity extends Activity implementsOnClickListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button button = new Button(this); button.setText("Lancia Sotto-attività"); button.setOnClickListener(this); setContentView(button); } public void onClick(View v) { Intent intent = new Intent(this, SubActivity.class); startActivity(intent); } }
  • 6. 23/04/2014 6 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Le attività Esempio sotto-attività: attività secondaria public class SubActivity extends Activity implements OnClickListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button button = new Button(this); button.setText("TerminaSotto-attività"); button.setOnClickListener(this); setContentView(button); } public void onClick(View v) { finish(); } }
  • 7. 23/04/2014 7 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Le attività Esempio sotto-attività: descrittore dell’applicazione (AndroidManifest.xml) <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="esempi.ciaomondo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SubActivity" android:label="@string/app_name" /> </application> Intent: descrizione di un’operazione che deve essere eseguita. Le attività, attraverso un intent-filter, possono essere attivate in risposta ad uno specifico evento. Gli intent-filter accettano figli di tre tipi: action, category, data.
  • 8. 23/04/2014 8 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Le attività Valore di ritorno di una sotto-attività: attività principale public class MainActivity extends Activity implementsOnClickListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button button = new Button(this); button.setText("Lancia Sotto-attività"); button.setOnClickListener(this); setContentView(button); } public void onClick(View v) { Intent intent = new Intent(this, SubActivity.class); // Il secondo parametro è un intero che rappresenta // il codice della richiesta startActivityForResult(intent, 10); }
  • 9. Le attività 23/04/2014 9 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Valore di ritorno di una sotto-attività: attività principale protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 10) { if (resultCode == 0) { Log.i("Sotto-attività","Interruzioneprima di setResult"); } else if (resultCode == 1) { Log.i("Sotto-attività","Risultato ottenuto correttamente"); Log.i("Sotto-attività","Messaggio: " + data.getStringExtra("messaggio")); Log.i("Sotto-attività","Cliccato: " + data.getBooleanExtra("cliccato", false)); SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.ITALY); Date d = new Date(data.getLongExtra("timestamp", 0)); Log.i("Sotto-attività","Timestamp: " + f.format(d)); } } } }
  • 10. 23/04/2014 10 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Le attività Valore di ritorno di una sotto-attività: attività secondaria public class SubActivity extends Activity implements OnClickListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button button = new Button(this); button.setText("TerminaSotto-attività"); button.setOnClickListener(this); setContentView(button); }
  • 11. 23/04/2014 11 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Le attività Valore di ritorno di una sotto-attività: attività secondaria public void onClick(View v) { Intent data = new Intent(); data.putExtra("messaggio", "Tutto ok!"); data.putExtra("cliccato", true); data.putExtra("timestamp", System.currentTimeMillis()); // Il primo parametro è un intero che rappresenta // l'identificativo del risultato (0 se non viene chiamato setResult). // Il secondo parametro può mancare ed è un Intent, il quale // contiene un dizionario chiave-valore (null se assente). setResult(1, data); finish(); } }
  • 12. 23/04/2014 12 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Layout - Java I componenti View estendono tutti la classe base android.view.View. Per mostrare sullo schermo l’oggetto View specificato: setContentView(View view). Tutti i widget richiedono, nei loro costruttori, un oggetto che estenda la classe astratta android.content.Context (Activity estende indirettamente Context). Pacchetto android.widget • TextView - setText() • EditText - getText() • Button - setText() • ImageView - setImageResource() • ImageButton - setImageResource() • CheckBox - setText() • RadioButton/RadioGroup • ToggleButton (on/off) • DatePicker - getDayOfMonth(), getMonth(), getYear(). • TimePicker - getCurrentHour(), getCurrentMinute(). • AnalogClock/DigitalClock
  • 13. Layout - Java 23/04/2014 13 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Layout: ViewGroup utilizzabili per posizionare i widget sullo schermo Pacchetto android.widget • FrameLayout: allinea il widget in alto a sinistra e lo estende per tutta la dimensione disponibile al layout stesso. • RelativeLayout: per default, il componente aggiunto viene allineato in alto a sinistra (dimensioni reali). E' possibile controllare l’allineamento attraverso setGravity(). • LinearLayout: il suo orientamento può essere stabilito chiamando il metodo setOrientation(), con argomento pari a LinearLayout.HORIZONTAL o LinearLayout.VERTICAL.Se si va di poco oltre la dimensione della riga, il sistema tenta un aggiustamento restringendo i componenti al di sotto delle loro dimensioni ideali. • TableLayout: permette di sistemare i componenti secondo uno schema a tabella. I TableLayout vanno costruiti aggiungendo al loro interno degli oggetti TableRow.
  • 14. Layout - Java 23/04/2014 14 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. TextView label1 = newTextView(this); label1.setText("Nome:"); EditText edit1 = new EditText(this); TextView label2 = new TextView(this); label2.setText("Cognome:"); EditText edit2 = new EditText(this); TextView label3 = newTextView(this); label3.setText("Sesso:"); RadioButtonradio1 = new RadioButton(this); radio1.setText("M"); RadioButtonradio2 = new RadioButton(this); radio2.setText("F"); RadioGroup radioGroup1 = new RadioGroup(this); radioGroup1.setOrientation(LinearLayout.HORIZONTAL); radioGroup1.setGravity(Gravity.CENTER); radioGroup1.addView(radio1); radioGroup1.addView(radio2); radioGroup1.check(radio1.getId());
  • 15. Layout - Java 23/04/2014 15 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Button button1 = new Button(this); button1.setText("Salva"); Button button2 = new Button(this); button2.setText("Annulla"); TableRow row1 = newTableRow(this); row1.setGravity(Gravity.CENTER); row1.addView(label1); row1.addView(edit1); TableRow row2 = newTableRow(this); row2.setGravity(Gravity.CENTER); row2.addView(label2); row2.addView(edit2); TableRow row3 = newTableRow(this); row3.setGravity(Gravity.CENTER); row3.addView(label3); row3.addView(radioGroup1);
  • 16. Layout - Java 23/04/2014 16 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. TableLayout tableLayout = newTableLayout(this); tableLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP); tableLayout.addView(row1); tableLayout.addView(row2); tableLayout.addView(row3); tableLayout.setColumnShrinkable(0, true); tableLayout.setColumnStretchable(1, true); LinearLayout linearLayout1 = new LinearLayout(this); linearLayout1.setGravity(Gravity.CENTER); linearLayout1.setOrientation(LinearLayout.HORIZONTAL); linearLayout1.addView(button1); linearLayout1.addView(button2); LinearLayout linearLayout2 = new LinearLayout(this); linearLayout2.setGravity(Gravity.CENTER); linearLayout2.setOrientation(LinearLayout.VERTICAL); linearLayout2.setPadding(5, 5, 5, 5); linearLayout2.addView(tableLayout); linearLayout2.addView(linearLayout1); setContentView(linearLayout2);
  • 17. Layout - XML 23/04/2014 17 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Editor basato su XML res/layout contiene le descrizioni dei layout e dei widget che saranno poi usati in una o più attività dell’applicazione. Per richiamare un layout XML: setContentView(R.layout.main);
  • 18. Layout - XML 23/04/2014 18 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
  • 19. Layout - XML 23/04/2014 19 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:padding="5dp" > <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="top|center_horizontal" android:shrinkColumns="0" android:stretchColumns="1" > <TableRow android:id="@+id/tableRow1" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="fill_horizontal|center_vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="fill_horizontal|center_vertical" android:text="Nome" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="match_parent"> <requestFocus /> </EditText> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="fill_horizontal|center_vertical" >
  • 20. Layout - XML 23/04/2014 20 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="fill_horizontal|center_vertical" android:text="Cognome" /> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="match_parent"/> </TableRow> <TableRow android:id="@+id/tableRow3" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="fill_horizontal|center_vertical" > <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="fill_horizontal|center_vertical" android:text="Sesso" /> <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checkedButton="0" android:gravity="center" android:orientation="horizontal" > <RadioButton android:id="@+id/radio0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="M" />
  • 21. 23/04/2014 21 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. Layout - XML <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="F" /> </RadioGroup> </TableRow> </TableLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Salva" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Annulla" /> </LinearLayout> </LinearLayout>
  • 22. Layout - XML 23/04/2014 22 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. A ogni componente nel file XML è possibile assegnare un ID @+nomeGruppo/nomeId In Java è possibile richiamare il componente e modificarlo R.nomeGruppo.nomeId Esempio: Button button = (Button) findViewById(R.id.button2); Attributi obbligatori: layout_width e layout_height • wrap_content: rende il componente grande tanto quanto impongono i suoi sotto-componenti. • match_parent: allarga il componente fino a fargli occupare tutto lo spazio concessogli dal suo contenitore d’ordine superiore.
  • 23. 23/04/2014 23 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. To be continued …