Android-Programmierung GUI: Layout

Willemers Informatik-Ecke

Das einzig seriöse Javabuch :-) Mehr...

.. enthält ein Kapitel zur Android-Programmierung.
Bei Amazon bestellen
2016-3-6
Auf diesen Seiten halte ich meine Erfahrungen im Bereich der Android-Programmierung fest, um sie später nachschlagen zu können. Die Ausführungen sind kein vollständiger Kurs, manchmal nur Notizen, aber vielleicht anderen hilfreich. Das Layout bestimmt die Anordnung der Kontrollelemente innerhalb einer Activity. Typischerweise wird das Layout bei der Android-Programmierung in einer XML-Datei festgelegt.

Die Layout-Datei

In der activity_xxx.xml wird das Layout der Activity xxx festgelegt. Die Bindung der XML-Datei an die Activity erfolgt aber von Java aus mit dem Aufruf von setContent aus der Methode onCreate heraus.
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_xxx);
Die XxxActivity hat eine XML-Datei die durch von der Vorgabe als RelativeLayout bestimmt wird.

RelativeLayout

Im RelativeLayout werden die Elemente im Verhältnis zu anderen Elementen angelegt, also unter jenem oder links von einem anderen.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".XxxActivity">

...
    <EditText
        android:id="@+id/edSpielername"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/spielerliste"
        android:singleLine="true"
        android:layout_toRightOf="@+id/textView"
        android:layout_toEndOf="@+id/textView"
        />
...

</RelativeLayout>
In den Elementen können folgende Relationen angegeben werden.
android:layout_above Das Element liegt über dem anderen Element.
android:layout_below Das Element liegt unter dem anderen Element.
android:layout_toLeftOf Das Element liegt links von dem anderen Element.
android:layout_toRightOf Das Element liegt rechts von dem anderen Element.
android:layout_toStartOf Das Element richtet sich nach dem Anfang dem anderen Elements aus. Die Elemente beginnen also in der gleichen vertikalen Position.
android:layout_toEndOf Das Element richtet sich nach dem Ende des anderen Elements aus.

LinearLayout

In einem LinearLayout werden die Elemente immer untereinander oder nebeneinander angeordnet. Die Richtung wird durch das Orientation-Attribut bestimmt. Dessen Wert kann horizontal oder vertical sein.
<LinearLayout
    android:orientation="horizontal"
    >

...

</LinearLayout>

Verschachteln von Layouts

Layouts können verschachtelt werden. So kann innerhalb des RelativeLayouts auch ein oder mehrere andere Layouts liegen, wie hier ein LinearLayout.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
    <Button
        android:id="@+id/bermudaview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
...
</LinearLayout>
Innerhalb des LinearLayouts liegen die Kontrollelemente, wie hier ein Button.

Buttons nebeneinander mittig ausrichten

Damit Buttons in der Horizontalen den Platz (halbwegs) gleichmäßig ausnutzen, legt man ein horizontales LinearLayout an. Darin wird über ein Weight bestimmt, welcher Button breiter werden muss als die anderen. Sind die Weights alle gleich, richten sie sich gleichmäßig aus.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".SpielerActivity">

    ...
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/virtuell"
        android:id="@+id/ckAutomat"
        android:layout_below="@+id/ed...."
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="3"
        android:layout_below="@+id/ckAutomat"
        >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/change"
        android:id="@+id/btChange"
        android:layout_weight="1"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:layout_weight="1"
        android:id="@+id/btAdd"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/del"
        android:id="@+id/btDel"
        android:layout_weight="1"
        />
    </LinearLayout>

</RelativeLayout>

Homepage (C) Copyright 2016 Arnold Willemer