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

Programmazione mobile: ANDROID

on

  • 263 views

Seconda lezione: attività e layout

Seconda lezione: attività e layout

Statistics

Views

Total Views
263
Views on SlideShare
263
Embed Views
0

Actions

Likes
0
Downloads
13
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Programmazione mobile: ANDROID Programmazione mobile: ANDROID Presentation Transcript

  • 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
  • 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
  • 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.
  • 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()"); } }
  • 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); } }
  • 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(); } }
  • 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.
  • 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); }
  • 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)); } } } }
  • 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); }
  • 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(); } }
  • 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
  • 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.
  • 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());
  • 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);
  • 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);
  • 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);
  • Layout - XML 23/04/2014 18 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
  • 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" >
  • 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" />
  • 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>
  • 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/04/2014 23 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. To be continued …