Mobile App Development

Werbung
Mobile App
Development
- Grafische Oberflächen -
Inhalt
• Ressourcen
• Allgemeines
• Views
• Layouting
Mobile App Development
Ressourcen
Android Ressourcen
• Ressourcen sind Dateien und Objekte, wie Layouts, Bilder, Farben und IDs
• Zu jeder Ressource wird
ein Eintrag in R.java
generiert
Mobile App Development
Android Ressourcen
public final class R {!
!
public static final class color {!
public static final int black=0x7f040000;!
}!
public static final class drawable {!
public static final int ic_launcher=0x7f020000;!
}!
public static final class id {!
public static final int LinearLayout1=0x7f080000;!
public static final int btnSayHello=0x7f080004;!
public static final int edtName=0x7f080003;!
public static final int imageView1=0x7f080001;!
public static final int menu_settings=0x7f080005;!
public static final int txtEnterName=0x7f080002;!
}!
public static final class layout {!
public static final int activity_main=0x7f030000;!
public static final int test_activity=0x7f030001;!
}!
public static final class menu {!
public static final int activity_main=0x7f070000;!
}!
public static final class string {!
public static final int app_name=0x7f050000;!
public static final int hello_world=0x7f050001;!
}!
}
Mobile App Development
Android Ressourcen
• Farben
res/values/colors.xml
<?xml version="1.0" encoding="utf-8"?>!
<resources>!
<color name="black">#00000000</color>!
<color name="green">#0000FF00</color>!
</resources>
public final class R {!
!
public static final class color {!
public static final int black=0x7f040000;
public static final int green=0x7f040001;!
}!
}
Mobile App Development
Android Ressourcen
• Strings
res/values/strings.xml
<resources>!
<string name="app_name">Hello World</string>!
<string name="hello_world">Hello world!</string>!
</resources>
public static final class string {!
public static final int app_name=0x7f050000;!
public static final int hello_world=0x7f050001;!
}
Mobile App Development
Android Ressourcen
• Layouts
public static final class layout {!
public static final int ! ! ! activity_main=0x7f030000;!
public static final int !
! ! ! test_activity=0x7f030001;!
}
Mobile App Development
Android Ressourcen
• Bilder
public static final class drawable {!
public static final int ! ! ! ! ! ic_launcher=0x7f020000;!
}
Mobile App Development
Android Ressourcen
• IDs
res/layout/activity_main.xml
<LinearLayout xmlns:android="..."!
xmlns:tools="http://schemas.android.com/tools"!
android:id="@+id/LinearLayout1" >!
!
!
!
<TextView!
android:id="@+id/txtEnterName"!
android:text="@string/name"
android:textColor="@color/black"
/>!
<Button!
android:id="@+id/btnSayHello"!
android:text="@string/say" />!
</LinearLayout>
public final class R {!
public static final class id {!
public static final int LinearLayout1=0x7f080000;!
public static final int btnSayHello=0x7f080004;!
public static final int name=0x7f080002;!
}
Mobile App Development
Android Ressourcen
• Verwendung im Quelltext
• Die Attribute, die in der R.java angelegt
wurden, können vom Quelltext aus als
Referenz-ID verwendet werden
• Beispiel:
Button btn = (Button) findViewById(R.id.btnSayHello);!
btn.setText(R.string.sayHello);!
btn.setBackgroundColor(R.color.green);
Mobile App Development
GUIs
Grafische Oberflächen
• Grafische Oberflächen können in Android
auf zwei Arten erstellt werden
• in Form von XML-Layout-Dateien, aus
denen zur Laufzeit Views erstellt werden
(LayoutInflater)
• oder programmatisch wie z.B. in Swing
• Wenn möglich sollten Layout-Dateien
verwendet werden (res/layout)
Mobile App Development
View
• View (Widget)
• zeichnet etwas auf dem Screen
• grafisches Element, mit dem der Benutzer
interagieren kann
• Oberklasse von allen Standard Controls
• Button, TextField, ProgressBar,
ImageView
Mobile App Development
ViewGroup
• ViewGroup
• unsichtbarer Container, der andere Views
oder ViewGroups aufnimmt
• ... und diese positioniert
• Oberklasse von Containern
• LinearLayout, GridLayout, ListView
Mobile App Development
View Hierarchie
• View und ViewGroups bilden eine
Hierarchie, d.h. einen Baum von Views
Mobile App Development
Beispiel Hello World
<LinearLayout "
xmlns:android="http://schemas.android.com/apk/res/android""
xmlns:tools="http://schemas.android.com/tools""
android:id="@+id/LinearLayout1""
"
... >"
!
!
!
!
!
!
<ImageView"
android:id="@+id/imageView1""
android:layout_gravity="center_horizontal""
android:src="@drawable/ic_launcher" />"
<LinearLayout"
android:layout_width="fill_parent""
android:layout_height="fill_parent">"
<TextView"
android:id="@+id/txtEnterName""
android:text="@string/name" />"
<EditText"
android:id="@+id/edtName""
android:inputType="textCapWords" /> "
</LinearLayout>"
<Button"
android:id="@+id/btnSayHello""
android:layout_gravity="center_horizontal""
android:text="@string/say" />"
</LinearLayout>
Mobile App Development
Views
Bu?on View
• Button besteht aus einem Text und/oder
einem Icon
• Bei Klick wird irgendeine Aktion ausgeführt
Mobile App Development
Bu?on View
• Button besteht aus einem Text und/oder einem Icon
• Bei Klick wird irgendeine Aktion ausgeführt
• XML
<Button"
android:id="@+id/btnMyButton""
android:text="@string/btnText"
android:drawableLeft="@drawable/ic_launcher" />
Mobile App Development
Bu?on View
• auf Klicks reagieren
• Möglichkeit 1:
• in der Activity einen OnClickListener
erstellen und am Button registrieren
• Möglichkeit 2:
• Angabe einer aufzurufenden Methode
während GUI Design
Mobile App Development
Bu?on View
• Möglichkeit 1
• programmatische Zuweisung einer
OnClickListener-Implementierung
Button btn = (Button) findViewById(R.id.btnSayHello);
btn.setOnClickListener(new View.OnClickListener() {"
@Override"
public void onClick(View v) {"
" " " /*"
" " "
* Button action code"
" " "
*/"
" " }"
" });
Mobile App Development
Bu?on View
• Möglichkeit 2
• Angabe einer Methode, die in der Activity
ausgeführt werden soll, wenn der Button
geklickt wurde
• Achtung: die Methode muss in der
Activity auch implementiert sein
<Button"
android:id="@+id/btnSayHello""
android:onClick="clickAction""
android:text="@string/say" />
Mobile App Development
Bu?on View
• Möglichkeit 2
Mobile App Development
Bu?on View
• Möglichkeit 2
• Implementierung der Methode
• gleicher Name, wie in XML <Button"
android:id="@+id/btnSayHello""
android:onClick="clickAction""
android:text="@string/say" />
• public-Zugriff
• void return Wert
• genau 1 Parameter:View
public void clickAction(View view) {"
// do Button action"
}
Mobile App Development
EditText View
• EditText Views ermöglichen dem Benutzer die Eingabe von Text
Mobile App Development
EditText View
• EditText Views ermöglichen dem Benutzer die Eingabe von Text
• Tastatur öffnet sich automatisch nach Touch
• XML
<EditText"
android:id="@+id/edtName""
android:inputType="textCapWords"
android:imeOptions="actionSend">
Mobile App Development
EditText View
• Input type
• gibt an, welche Art von Text eingegeben
werden soll, z. B. Plain, EMail, Password
• Textarten werden in Klassen eingeteilt
• Variation von Textklassen
• beeinflusst das Keyboard-Verhalten, z. B.
erster Buchstabe groß, multi line
Mobile App Development
EditText View
• Input type Beispiele
Klasse
Text
Variation CapSentence
Mobile App Development
Number
Text
Decimal
Password
EditText View
• Input type setzen
Mobile App Development
EditText View
• Input type setzen
• XML
<EditText"
!" android:id="@+id/edtName""
" android:inputType="textCapWords|textNoSuggestions" />
!
• programmatisch
EditText edtName = (EditText) findViewById(R.id.edtName);"
edtName.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS "
" " | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
Mobile App Development
EditText View
• Keyboard action
• gibt an, welcher Button an Stelle des
Return-Buttons in der Tastatur angezeigt
werden soll
• XML
<EditText "
android:id="@+id/myEditText""
android:imeOptions="actionNone""
android:singleLine="true" />
Mobile App Development
EditText View
actionNext
Mobile App Development
actionDone
actionSend
EditText View
actionNone
Mobile App Development
actionGo
actionSearch
EditText View
• Auf Keyboard action reagieren
EditText txt = (EditText) findViewById(R.id.EditText01);"
txt.setOnEditorActionListener(new TextView.OnEditorActionListener() {"
" " @Override"
" " public boolean onEditorAction("
TextView v, int actionId, KeyEvent event) {"
" " " boolean handled = false;"
" " " " "
!
" "
" "
});
!
" return handled;"
}"
Mobile App Development
EditText View
• Weitere Eigenschaften
• Hint text
<EditText ... "
android:hint="Hint Text">
!
• Lines
<EditText ... "
android:lines="3">
!
• Bilder
<EditText ... "
android:drawableLeft
" " ="@drawable/ic_launcher">
Mobile App Development
EditText View
• ... und noch mehr Eigenschaften
• Text style, typeface, size
• Line spacing
• Text color, hint color
• ...
Mobile App Development
CheckBox View
• Eine CheckBox ermöglicht dem Benutzer eine mit ihr verknüpfte Eigenschaft auf true oder false zu setzen.
Mobile App Development
CheckBox View
• Eine CheckBox ermöglicht dem Benutzer eine mit ihr verknüpfte Eigenschaft auf true oder false zu setzen.
• XML
<CheckBox"
android:id="@+id/chbBeer""
android:layout_width="match_parent""
android:layout_height="wrap_content""
android:checked="true""
android:text="@string/beer" />
Mobile App Development
CheckBox View
• auf CheckBox Klicks reagieren
• Möglichkeit 1
• Angabe einer Methode die in der
Activity ausgeführt werden soll, wenn
der Button geklickt wurde
• Möglichkeit 2
• programmatische Zuweisung eines
OnClickListeners
Mobile App Development
CheckBox View
• Möglichkeit 1
• Angabe einer Methode, die in der Activity
ausgeführt werden soll, wenn die
CheckBox geklickt wurde
<CheckBox"
android:id="@+id/checkBox1""
android:checked="true""
android:onClick="onBeerBoxClicked""
android:text="@string/beer" />
Mobile App Development
CheckBox View
• Möglichkeit 1
Mobile App Development
Bu?on View
• Möglichkeit 1
• Implementierung der Methode
• gleicher Name, wie in XML <CheckBox"
android:id="@+id/checkBox1""
android:checked="true""
android:onClick="onBeerBoxClicked""
android:text="@string/beer" />
• public-Zugriff
• void return Wert
• genau ein Parameter:View
Mobile App Development
public void onBeerBoxClicked(View view) {"
" CheckBox cb = (CheckBox) " " findViewById(R.id.checkBox1);"
" if (cb.isSelected()) {"
" " /* do something */"
" } else {"
" " /* do the other things */"
" }"
}
CheckBox View
• Möglichkeit 2
• programmatische Zuweisung eines
OnClickListeners
CheckBox cbBeer = (CheckBox) findViewById(R.id.cbBeer);
cbBeer.setOnClickListener(new View.OnClickListener() {"
" " @Override"
" " public void onClick(View v) {"
" " " CheckBox cb = (CheckBox) v;"
" " " if (cb.isChecked()) {"
" " " " /* do something */"
" " " " Toast.makeText(MainActivity.this, "
" " " " " " "Beer clicked", Toast.LENGTH_LONG).show();"
" " " } else {"
" " " " /* do the other things */"
" " " }"
" " }"
" });
Mobile App Development
CheckBox View
• Möglichkeit 2
• Alternative: programmatische Zuweisung
eines OnCheckedChangeListener
cbBeer.setOnCheckedChangeListener(new OnCheckedChangeListener() {"
" @Override"
" public void onCheckedChanged(
" " CompoundButton buttonView, boolean isChecked) {"
" " " /* do your stuff */"
" " }"
});
Mobile App Development
RadioBu?on View
• RadioButtons ermöglichen dem Benutzer die Auswahl einer Option aus mehreren verschiedenen.
Mobile App Development
RadioBu?on View
• Optionen, die durch RadioButton
repräsentiert werden, schließen sich
gegenseitig aus (mutually exclusiv)
• RadioButtons werden in RadioGroups
zusammengefasst
Mobile App Development
RadioBu?on View
• XML
<RadioGroup"
android:id="@+id/radioGroup1""
android:orientation="vertical" >"
!
!
!
!
<RadioButton"
android:id="@+id/radio0""
android:checked="true""
android:text="@string/mada"/>"
<RadioButton"
android:id="@+id/radio1""
android:text="@string/ikonzepte" />"
<RadioButton"
android:id="@+id/radio2""
android:text="@string/prakSchalt" />"
</RadioGroup>
Mobile App Development
RadioBu?on View
<RadioGroup"
android:id="@+id/radioGroup1""
android:orientation="vertical" >"
!
• auf Auswahl reagieren
!
• Angabe der
Activity-Methode!
!
<RadioButton"
android:id="@+id/radio0""
android:checked="true""
android:text="@string/mada"
android:onClick="onSelect"/>"
<RadioButton"
android:id="@+id/radio1""
android:text="@string/ikonzepte""
android:onClick="onSelect" />"
<RadioButton"
android:id="@+id/radio2""
android:text="@string/prakSchalt"
android:onClick="onSelect"/>"
</RadioGroup>
Mobile App Development
RadioBu?on View
• Implementierung in Activity
• Regeln für Signatur analog zu Button und
CheckBox
public void onSelect(View view) {"
" switch (view.getId()) {"
" " case R.id.radio0:"
" " " /* MADA selected */"
" " " break;"
" " case R.id.radio1:"
" " " /* IKZ selected */"
" " " break;"
" " case R.id.radio2:"
" " " /* prakt. Schalt. selected */"
" " " break;"
" }"
}
Mobile App Development
ProgressBar View
• ProgressBars werden verwendet, um den Fortschritt einer Operation anzuzeigen
Mobile App Development
ProgressBar View
• ProgressBars werden verwendet, um den Fortschritt einer Operation anzuzeigen
<ProgressBar"
android:id="@+id/progressBar1"
style="
" "@android:style/Widget.ProgressBar.Horizontal""
android:layout_width="fill_parent""
android:layout_height="wrap_content""
android:max="100""
android:progress="70" />
Mobile App Development
ProgressBar View
• style Attribute bestimmt die Form der ProgressBar
<ProgressBar"
android:id="@+id/progressBar1"
style="
" "@android:style/Widget.ProgressBar.Horizontal""
android:layout_width="fill_parent""
android:layout_height="wrap_content""
android:max="100""
android:progress="70" />
Mobile App Development
ProgressBar View
• max = Anzahl Ticks
• progress = aktuelle Ticks
<ProgressBar"
android:id="@+id/progressBar1"
style="
" "@android:style/Widget.ProgressBar.Horizontal""
android:layout_width="fill_parent""
android:layout_height="wrap_content"
android:indeterminate="false""
android:max="100""
android:progress="70" />
Mobile App Development
ProgressBar View
• Spezielle ProgressBars
• RatingBar
• Verwendung zur Dar-
stellung einer Bewertung
• SeekBar
• Verwendung zum Setzen eines Wertes (z. B. Lautstärke)
Mobile App Development
Spinner View
• Eine Spinner View erlaubt dem Benutzer die Auswahl eines einzelnen Elements aus einer Menge.
Mobile App Development
Spinner View
• Eine Spinner View erlaubt dem Benutzer die Auswahl eines einzelnen Elements aus einer Menge.
• XML
<Spinner"
android:id="@+id/mySpinner""
android:layout_width="fill_parent""
android:layout_height="wrap_content"
... />"
Mobile App Development
Spinner View
• Wo kommen die Superhelden her und wie
wird der Spinner gefüllt?
Mobile App Development
Spinner View
• Wo kommen die Superhelden her und wie
wird der Spinner gefüllt?
• 1. Situation: Elemente sind zur Compile-Zeit bekannt
• 2. Situation: Elemente sind zur Compile-Zeit noch
nicht bekannt
Mobile App Development
Spinner View
• Sind die Elemente zur Compile-Zeit
bekannt, können sie in einer ArrayResource eingetragen und verwendet
werden.
• Was sind Array-Resourcen?
Mobile App Development
Spinner View
• Definition eines String arrays
• res/values/strings.xml
<resources>"
!
!
<string name="app_name">Test</string>"
<string name="hello_world">Hello world!</string>
... ..."
<string-array name="spinner_values">"
<item >Superman</item>"
<item >Batman</item>"
<item >Spiderman</item>"
<item >Flash</item>"
</string-array>"
"
</resources>
Mobile App Development
Spinner View
!
• Zuweisung des String arrays an den Spinner
res/values/strings.xml
<resources>
..."
<string-array name="spinner_values">"
<item >Superman</item>"
<item >Batman</item>"
<item >Spiderman</item>"
<item >Flash</item>"
</string-array>
"
</resources>
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>"
<LinearLayout xmlns:android="..."
" ...
" <Spinner"
" " android:id="@+id/mySpinner"
" " android:entries="@array/spinner_values"/>
" ...
</LinearLayout>
Mobile App Development
Spinner View
!
• 2. Situation: Elemente erst zur Laufzeit bekannt
• Verwendung von Adaptern
• Adapter bilden Brücke zwischen sog.
AdapterViews und den darzustellenden
Daten
Mobile App Development
Spinner View
!
• Verwendung eines ArrayAdapters
!
/* Erstellung eines Adapters */
ArrayAdapter<String> adapter = new ArrayAdapter<String>("
" " " " this, android.R.layout.simple_spinner_item);
/* Datenelemente hinzufügen */"
adapter.add("Superman");"
adapter.add("Batman");"
adapter.add("Spiderman");"
adapter.add("Flash");
/* Spinner Instanz holen */
Spinner s = (Spinner) findViewById(R.id.mySpinner);"
!
/* Adapter für den Spinner festlegen */"
s.setAdapter(adapter);
Mobile App Development
Spinner View
• Auf eine Auswahl reagieren
Spinner spinner = " (Spinner) findViewById(R.id.mySpinner);
spinner.setOnItemSelectedListener("
" new AdapterView.OnItemSelectedListener() {"
!
"
"
"
"
"
"
"
"
!
@Override"
public void onItemSelected(
" " AdapterView<?> parent, "
" " View view, int pos, long id) {"
" // TODO: implement me"
" String str = (String) " " " " " parent.getItemAtPosition(pos);"
}"
" @Override"
" public void onNothingSelected(
" " " AdapterView<?> parent) {"
" " // TODO: implement me"
" }" "
});
Mobile App Development
List View
• ListViews werden verwendet, um mehrere Elemente in einer vertikalen Liste darzustellen
Mobile App Development
List View
• ListViews werden verwendet, um mehrere Elemente in einer vertikalen Liste darzustellen
• XML
<ListView"
android:id="@+id/listView1""
android:layout_width="fill_parent""
android:layout_height="wrap_content""
android:entries="@array/list_values" >
Mobile App Development
List View
• Wie wird die Liste befüllt? analog zur
SpinnerView
• 1. Situation: Elemente sind zur Compile-Zeit bekannt
• 2. Situation: Elemente sind zur Compile-Zeit noch
nicht bekannt
Mobile App Development
String-­‐Array
• Definition eines String arrays
• res/values/strings.xml
<resources>"
!
<string name="app_name">Test</string>"
<string name="hello_world">Hello world!</string>
... ...
<string-array name="list_values">"
<item >Brot</item>"
<item >Schinken</item>"
<item >Käse</item>"
<item >Butter</item>"
<item >Bier</item>"
</string-array>"
"
</resources>
Mobile App Development
String-­‐Array
•
!
Zuweisung des String arrays an die Liste
res/layout/activity_main.xml
res/values/strings.xml
<resources>
..."
<string-array name="list_values">"
<item >Brot</item>"
<item >Schinken</item>"
<item >Käse</item>"
<item >Butter</item>"
<item >Bier</item>"
</string-array> "
</resources>
<?xml version="1.0" encoding="utf-8"?>"
<LinearLayout xmlns:android="..."
" ...
" <ListView"
" " android:id="@+id/myList"
" " android:entries="@array/list_values"/>
" ...
</LinearLayout>
Mobile App Development
List View • 2. Situation: Elemente erst zur Laufzeit bekannt
• Verwendung eines Adapters, um die Liste
zur Laufzeit zu befüllen
Mobile App Development
Spinner View
• Verwendung eines Adapters, um die Liste
zur Laufzeit zu befüllen
ArrayAdapter<String> adapter = "
" " " new ArrayAdapter<String>(this, " " " " " android.R.layout.simple_list_item_1);
adapter.add("Brot");"
adapter.add("Schinken");"
adapter.add("Käse");"
" " "
ListView lv = (ListView) findViewById(R.id.listView1);"
lv.setAdapter(adapter);
Mobile App Development
List View
!
• Auf Element Klicks reagieren
ListView lv = (ListView) findViewById(
" " R.id.myListView);"
" " "
lv.setOnItemClickListener(
" new AdapterView.OnItemClickListener() {"
" " @Override"
" " public void onItemClick(
" " " AdapterView<?> list,
" " " View view, int pos, long id) {"
" " " " /* do your stuff here */"
" " }"
});
Mobile App Development
LayouKng
Layouts
• Layouts ...
• sind ViewGroups (Container)
• können andere ViewGroups und Views
aufnehmen
• werden verwendet, um ihre
Kindelemente auf dem Screen zu
positionieren
Mobile App Development
Layout Parameter
• Jede View besitzt Layout-Parameter, die der
umgebenden ViewGroup mitteilen, wie die
View in Position und Größe dargestellt
werden soll.
• Je nach umgebender View werden
verschiedene Layout-Parameter verwendet.
Mobile App Development
Layout Parameter
• Beispiel
<Button"
" android:id="@+id/myButton""
" android:layout_width="wrap_content""
" android:layout_height="wrap_content""
" android:text="Button" />
<Button"
" android:id="@+id/myButton""
" android:layout_width="wrap_content""
" android:layout_height="fill_parent""
" android:text="Button" />
<Button"
" android:id="@+id/myButton""
" android:layout_width="fill_parent""
" android:layout_height="fill_parent""
" android:text="Button" />
Mobile App Development
FrameLayout
• wird in der Regel verwendet, um ein Element darzustellen
• Layout-Attribut gravity
<FrameLayout xmlns:android=
" " "http://schemas.android.com/apk/res/android""
android:layout_width="fill_parent""
android:layout_height="fill_parent" >"
!
!
<Button"
android:id="@+id/myButton""
android:layout_width="wrap_content""
android:layout_height="wrap_content""
android:layout_gravity="center""
android:text="@string/mybutton" />"
</FrameLayout>
Mobile App Development
FrameLayout
auch mehrere, gestapelte Views
• kann
enthalten
• Darstellung nach Einfügereihenfolge
<FrameLayout xmlns:android=
" " "http://schemas.android.com/apk/res/android""
" android:layout_width="fill_parent""
" android:layout_height="fill_parent" >"
" <TextView android:id="@+id/textView1""
android:layout_width="wrap_content""
android:layout_height="wrap_content""
android:layout_gravity="center""
android:text="@string/lorem" />"
<Button android:id="@+id/myButton""
android:layout_width="wrap_content""
android:layout_height="wrap_content""
android:layout_gravity="center""
android:text="Button" />"
</FrameLayout>
Mobile App Development
LinearLayout
• Ein LinearLayout richtet seine
Kindelemente entlang einer bestimmt
Richtung aus
• Diese Richtung (Orientierung) kann
horizontal und vertikal sein
Mobile App Development
LinearLayout
• Orientierung
<LinearLayout xmlns:android="...""
android:layout_width="fill_parent""
android:layout_height="fill_parent""
android:orientation="horizontal"
android:orientation="vertical" >"
!
<TextView"
android:id="@+id/textView1""
android:text="@string/enter"/>"
<EditText"
android:id="@+id/editText1""
android:layout_width="0dip""
android:layout_height="wrap_content"/ >"
<Button"
android:id="@+id/button1""
android:layout_width="wrap_content""
android:layout_height="wrap_content""
android:text="@string/mybutton" />
</LinearLayout>
Mobile App Development
LinearLayout
• Layout-Parameter weight
• gibt an, wie groß eine View im Verhältnis
zu anderen Views dargestellt werden soll
• nicht ausgefüllter Platz im parent wird
zwischen den Views gemäß dem
Verhältnis ihrer weight Werte verteilt
<EditText"
android:id="@+id/myEditText""
android:layout_width="fill_parent""
android:layout_height="wrap_content""
android:layout_weight="2" >
Mobile App Development
LinearLayout
• Beispiel Layout-Parameter weight
weight
weight
weight
TextField
-
-
1
EditText
-
1
2
Button
-
-
3
Mobile App Development
TableLayout
• Das TableLayout richtet seine Kindelemente
in Form einer Tabelle aus, d. h. in Form von
Spalten und Zeilen
• Aufbau des Layouts ist sehr ähnlich zu
HTML-Tabellen (<tr>, <td>)
• Kindelemente werden in Zeilen und Zellen
gruppiert
Mobile App Development
TableLayout
• Beispiel
"
!
<TableLayout android:stretchColumns="*" >"
<TableRow"
android:id="@+id/tableRow1" >"
<TextView"
android:id="@+id/textView1""
android:text="Text1" />"
<TextView"
android:id="@+id/textView2""
android:text="Text2" />"
</TableRow>"
<TableRow android:id="@+id/tableRow2">"
<Button"
android:id="@+id/button1""
android:text="Button1" />"
<Button"
android:id="@+id/button2""
android:text="Button2" />"
</TableRow>"
</TableLayout>
Mobile App Development
TableLayout
• Shrink-Attribut
• gibt an, welche Spalten verkleinert
werden sollen, wenn der Platz nicht für
alle reicht
• mögliche Werte: • Liste von Spaltenindizes
• * für alle Spalten
Mobile App Development
TableLayout
• Shrink-Attribut
<TableLayout ..."
android:shrinkColumns="*">"
!
"
!
"
<TableRow"
android:id="@+id/tableRow1">"
" ..."
</TableRow>"
....
Mobile App Development
TableLayout
• Stretch-Attribut
• gibt an, welche Spalten vergrößert
werden sollen, wenn mehr Platz als
benötigt zur Verfügung steht
• mögliche Werte: • Liste von Spaltenindizes
• * für alle Spalten
Mobile App Development
TableLayout
• Stretch-Attribut
<TableLayout ..."
android:stretchColumns="0""
android:stretchColumns="1,2""
android:stretchColumns="*" "
>"
!
<TableRow ...>"
..."
</TableRow>"
</TableLayout>
Mobile App Development
RelaKveLayout
• RelativeLayout wird verwendet, um Views
relativ zu einander auszurichten
• Nachteil: kompliziertes Layout • Vorteil: sehr flache View-Hierarchie und
dadurch bessere Performance
Mobile App Development
RelaKveLayout
<RelativeLayout xmlns:android="...""
android:id="@+id/RelativeLayout1""
android:layout_width="fill_parent""
android:layout_height="fill_parent">"
!
!
!
!
<TextView"
android:id="@+id/textView1""
android:layout_alignParentLeft="true""
android:layout_alignParentTop="true"/>"
<EditText"
android:id="@+id/editText1""
android:layout_alignLeft="@+id/textView1""
android:layout_below="@+id/textView1"/ >"
<Button"
android:id="@+id/button1""
android:layout_alignRight="@+id/editText1""
android:layout_below="@+id/editText1""
android:text="@string/mybutton" />"
</RelativeLayout>
Mobile App Development
RelaKveLayout
• RelativeLayout.LayoutParams
http://developer.android.com/reference/android/widget/
RelativeLayout.LayoutParams.html
Mobile App Development
RelaKveLayout
• RelativeLayout.LayoutParams
http://developer.android.com/reference/android/widget/
RelativeLayout.LayoutParams.html
Mobile App Development
<include/>
• Wiederverwendung von Layouts
• Oft ist es sinnvoll bestimmte Layouts
wieder zu verwenden, um Mehrarbeit zu
vermeiden
• Hierfür bietet Android das <include/>
Element
Mobile App Development
<include/>
• Beispiel
<?xml version="1.0" encoding="utf-8"?>"
<LinearLayout ..."
android:layout_width="match_parent""
android:layout_height="wrap_content""
android:gravity="right""
android:orientation="horizontal" >"
<Button"
android:id="@+id/btnOk""
android:layout_width="wrap_content""
android:layout_height="wrap_content""
android:text="@android:string/ok" />"
<Button"
android:id="@+id/btnCancel""
android:layout_width="wrap_content""
android:layout_height="wrap_content""
android:text="@android:string/cancel" />"
</LinearLayout>
Mobile App Development
<include/>
• Beispiel
<RelativeLayout ... >"
!
!
!
!
<TextView"
android:id="@+id/textView1""
android:layout_width="wrap_content""
android:layout_height="wrap_content""
android:text="@string/name"/>"
<EditText"
android:id="@+id/editText1""
android:layout_width="wrap_content""
android:layout_height="wrap_content""
android:layout_toRightOf="@+id/textView1"/>"
<include"
android:id="@+id/include1""
android:layout_width="match_parent""
android:layout_height="wrap_content""
layout="@layout/ok_cancel" />"
</RelativeLayout>
Mobile App Development
PrakKkum
Übung
Übung 01 - Taschenrechner
Es soll eine Taschenrechner-App erstellt werden, mit der einfache Berech-
nungen durchgeführt werden können. !
Die App soll mindestens die Grundrechenarten Addition, Subtraktion, Mul-
tiplikation und Division unterstützen. Außerdem soll es möglich sein, mehr !
als zwei Operanden und mehr als einen Operator einzugeben, sowie das !
Ergebnis der Berechnung als Operand für die nächste Berechnung zu ver-
wenden.!
Für die Entwicklung der App sollen die in der Vorlesung vorgestellten View- !
und ViewGroup-Elemente verwendet werden.!
Hinweis:!
Der Fokus dieser Übung liegt nicht auf der Auswertung mathematischer !
Ausdrücke, sondern auf der Entwicklung einer funktionsfähigen Oberfläche. Aus diesem Grund kann für die Auswertung und Berechnung der Ausdrücke eine externe Bibliothek, wie bspw. http://www.objecthunter.net/exp4j verwendet werden.!
!
Mobile App Development
Literatur
I.
II.
III.
Arno Becker, Marcus Pant, Android 4.4, 3.Auflage,
dpunkt.verlag, ISBN: 978-89864-809-7
Thomas Künneth: Android 3 - Apps entwickeln mit dem
Android SDK
Galileo Press, 2011
Mark L. Murphy, Commonsware, The Busy Coder’s Guide
to Android Development
IV. http://developer.android.com
V. http://www.androidpit.de/de/android/wiki
Herunterladen