Android: Tvorba GUI

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (Oprava vzhledu, přidání souvisejících stránek.)
(Osamostatněny stránky se základními prvky a s pokročilými prvky.)
 
Řádka 12: Řádka 12:
 
* Editovat přímo XML souboru.
 
* Editovat přímo XML souboru.
 
* Zápis prostřednictvím kódu v Javě.
 
* Zápis prostřednictvím kódu v Javě.
 
 
== Prvky GUI ==
 
 
=== TextView ===
 
*  Popisek bez možnosti editování.
 
*  Metody a odpovídající XML atributy:
 
** <code>android:id</code>... identifikátor prvku (viz dále)
 
** <code>android:text</code>... zobrazený text
 
*** <code>setText(String text)</code>... nastavení textu
 
** Pro zápis textů je vhodné použít notaci <code>@string</code> viz Multilanguage.
 
 
=== Button ===
 
* Podtřída TextView, dědí všechny vlastnosti.
 
; XML atributy:
 
* android:id
 
* android:onClick = "metoda"
 
** Aktivita (třída) pak musí mít metodu: <code>public void metoda(View view) {...}</code>.
 
** Popis reakce na stisk tlačítka popíšeme v&nbsp;této metodě.
 
 
=== ImageView, ImageButton ===
 
; XML atributy:
 
* android:id
 
* android:scr = "@drawable/zdroj-bez-pripony"
 
** Lze použít obrázky: PNG, JPEG nebo GIF
 
** Obrázky musí být uloženy v&nbsp;projektu ve složce: <code>res/drawable</code>
 
<ImageButton android:src="@drawable/obrazek" />
 
 
* Dynamické nastavování obrázků:
 
Resources res = getResources();
 
Drawable img = res.getDrawable(R.drawable.cross);
 
ibt.setImageDrawable(img);
 
 
=== EditText ===
 
;  XML atributy:
 
* android:id
 
* android:autoText="true"
 
** automatické dokončování slov, lépe ale použít třídu AutoCompleteTextView
 
* android:singleLine="false"
 
** text na více řádcích
 
* android:enabled="false"
 
** textové pole nepůjde editovat
 
; Metody
 
* <code>getText()</code>
 
** Zpracování výsledku:
 
** Vrací typ Editable.
 
** Lze použít jako parametr pro Toast:
 
EditText et = (EditText) findviewbyid(R.id.txt);
 
Editable str = txt.getText(); 
 
Toast toast = Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG);
 
toast.show(); 
 
* Editable má metodu: <code>toString();</code>
 
 
=== AutoCompleteTextView ===
 
*  Vylepšení třídy EditText pro automatické doplňování.
 
*  android:id
 
 
=== CheckBox ===
 
; XML atributy
 
android:id
 
; Metody:
 
isChecked()
 
setChecked()
 
toggle()
 
 
=== RadioButton ===
 
 
=== RadioGroup ===
 
; XML atributy
 
android:id (viz dále)
 
; Metody:
 
getCheckedRadioButtonId()
 
* Vrací ID aktuálně zaškrtnutého tlačítka.
 
 
=== AnalogClock ===
 
 
=== DigitalClock ===
 
; Metody:
 
getText()
 
* Vrací datový typ ''Editable''.
 
 
=== Switch ===
 
 
  
  
Řádka 105: Řádka 22:
 
**  Soubor s texty
 
**  Soubor s texty
 
**  <string name="popis_textu">Text ke zobrazení</string>
 
**  <string name="popis_textu">Text ke zobrazení</string>
Poznámky
+
 
  
 
== Identifikace prvků GUI ==
 
== Identifikace prvků GUI ==
Řádka 173: Řádka 90:
 
****android:columnCount="3"
 
****android:columnCount="3"
  
 
== Menu ==
 
* developer.android.com > Guide > Topics > Ui > Menus <http://developer.android.com/guide/topics/ui/menus.html>
 
* res/menu/menu.xml
 
**  XML popis struktury menu.
 
**  <menu>
 
**  <item>
 
****android:id
 
***** android:id="@+id/otevrit"
 
****android:title
 
***** popiska
 
****Standardně nepárový tag.
 
****Obsahem elementu může být další element <menu> (podmenu).
 
****android:icon
 
***** @drawable/obrazek
 
****android:alphabeticShortcut="x"
 
**  Příklad:
 
****Zpět a Znovu
 
* Hlavní menu
 
**  Z XML:
 
****public boolean onCreateOptionsMenu(Menu menu)
 
***** Definujeme v aktivitě, která má mít menu.
 
****MenuInflater
 
***** třída, která vytváří propojení s XML souborem.
 
***** public boolean onCreateOptionsMenu(Menu menu) {
 
***** o
 
******  MenuInflater inflater = getMenuInflater();
 
******  inflater.inflate(R.menu.menu, menu);
 
******  return true;
 
******  }
 
**  Dynamicky doplněné
 
****public boolean onCreateOptionsMenu(Menu menu)
 
****menu.add(int idSkupinyVoleb, int idVolby, int poradiVolbyVMenu, String textVolby)
 
****Příklad:
 
***** menu.add(1,1,0, "otevri");
 
***** menu.add(1,2,1, "zavri");
 
**  Obsluha
 
****public boolean onOptionsItemSelected(MenuItem item)
 
***** Spustí se při kliknutí na menu.
 
****item.getItemId()
 
***** switch (item.getItemId()) {
 
***** case R.id.otevri:
 
***** ...
 
***** return true;
 
***** }
 
* Kontextové menu
 
**  registerForContextMenu(view)
 
****Registrace komponenty (view) pro kontext. menu.
 
****Příklad (kód aktivity):
 
***** public void onCreate(Bundle savedInstanceState) {
 
***** o
 
******  super.onCreate(savedInstanceState);
 
******  setContentView(R.layout.main);
 
******  Button b = (Button) R.findViewById(R.id.tlacitko);
 
******  registerForContextMenu(b);
 
**  onCreateContextMenu()
 
****public boolean onCreateContextMenu(ContextMenu menu, View v, contextMenuInfo menuInfo) {
 
****o
 
***** super.onCreateContextMenu(menu, v, menuInfo);
 
***** if (v.getId()==R.id.tlacitko) {
 
***** o
 
******  getMenuInflater().inflate(R.menu.kontextmenu, menu);
 
******  }
 
***** }
 
**  onContextItemSelected()
 
****public boolean onContextItemSelected(MenuItem item) {
 
****o
 
***** Button b = (Button) findViewById(R.id.tlacitko);
 
***** switch (item.getItemId()) {
 
***** o
 
******  case R.id.modra:
 
******  b.setBackgroundColor(Color.BLUE);
 
******  return true;
 
******  default:
 
******  return super.onContextItemSelected(item);
 
******  }
 
***** }
 
* Vytvoření
 
**  hlavní menu
 
****Jednou při vytvoření aktivity.
 
**  kontextové menu
 
****Při každém vyvolání (podržením prstu na prvku).
 
 
 
== Vyskakovací okna ==
 
* Toast
 
**  Třída
 
**  Bublina, která se objeví a zase zmizí.
 
**  Metody
 
****setText(...)
 
****setDuration(konstantaDobyTrvani)
 
****makeText(Activity aktivita, String text, konstantaDobyTrvani)
 
***** Vytvoří instanci.
 
***** Konstanty: <#ID_1440998896>
 
******  Toast.LENGTH_LONG
 
******  Toast.LENGTH_SHORT
 
****show()
 
***** Zobrazí bublinu!
 
****Konstanty doby trvání:
 
***** Toast.LENGTH_LONG
 
***** Toast.LENGTH_SHORT
 
* AlertDialog
 
**  kritické události nebo potvrzení
 
****AlertDialog dialog = new AlertDialog(Neutral, "OK");
 
****Dialog.setText(text);
 
****Dialog.setTitle("Upozornění");
 
****Dialog.show();
 
* Builder
 
**  umožňuje nastavit vlastnosti dialogu.
 
 
 
== Přepínání obrazovek ==
 
*  Aktivita... jedna obrazovka aplikace.
 
** Je realizována třídou, která je potomkem třídy <code>android.app.Activity</code>.
 
; Životní cyklus aktivity:
 
* Viz [http://developer.android.com/reference/android/app/Activity.html developer.android.com > Reference > Android > App > Activity]
 
* Metody:
 
setContentView()
 
* Náhled obsahu.
 
onCreate()
 
* Volá se:
 
** Při spuštění aktivity.
 
** Pokud bylo málo paměti a komponenta ve stavu onPause() nebo onStop() byla uvolněna.
 
onStart()
 
* Následuje po:
 
** <code>onCreate()</code>
 
** <code>onRestart()</code>
 
onResume()
 
* Když se uživatel vrátí k obrazovce (ale byla předtím stále viditelná):
 
* Následuje po:
 
** onStart()
 
** onPause()
 
onPause()
 
* Uživatel se přepne do jiné aktivity
 
onStop()
 
*Aktivita již nebude viditelná.
 
onRestart()
 
* Aktivita byla znovu zviditelněna (předtím bylo okno skryto).
 
* Následuje tedy po:
 
** onStop()
 
** onDestroy()
 
* Ukončení aktivity.
 
 
* Spuštění aktivity
 
Intent i = new Intent(this, novaAktivita.class);
 
startActivity(i);
 
* Přidání aktivity do manifestu:
 
<activity android:name="novaAktivita" />
 
  
 
== Další otázky ==
 
== Další otázky ==

Aktuální verze z 25. 6. 2015, 10:13


Obsah

Nástroje pro tvorbu grafického rozhraní aplikace (GUI)


Texty/multilanguage


Identifikace prvků GUI

android:id
findViewById(...)
  • v XML:
<TextView android:id="@+id/popis" .../>
  • v kódu:
TextView tv = (TextView) this.findViewById(R.id.popis);
Další metody
int View.getId()
View View.getParent()
int View.getParent()
View View.getRootView()


Kontejnery


Další otázky

Vytvářet GUI v kódu, nebo editací XML?


Související stránky

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje