Layouts mit Android [] (Layouts mit Android), Lektion, Seite 722717
https://www.purl.org/stefan_ram/pub/layouts_android (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Android-Entwicklung

Sichtbehälter mit Android 

Eine Anordnung

Die gleichzeitige Anzeige mehrerer Oberflächenelemente kann realisiert werden, indem diese in einen Behälter eingefügt werden.

Das folgende Programm zeigt eine Tastfläche »valueButton« in einem horizontalen Behälter »layout«.

MainActivity.java

package com.example;

public class MainActivity extends android.app.Activity
{

/** Der momentante Stand des Zaehlers. */

int i = -1;

/** Eine Tastflaeche, die eine Zahl enthalten soll. */

android.widget.Button valueButton;

/** Initialisiert die Tastflaeche {@code com.example.MainActivity.this.valueButton}.
@param context Kontext der Anwendung, fuer die die Tastflaeche bestimmt ist */

void initValueButton( final android.content.Context context )
{ MainActivity.this.valueButton = new android.widget.Button( context );
MainActivity.this.valueButton.setGravity
( android.view.Gravity.LEFT | android.view.Gravity.TOP );
MainActivity.this.valueButton.setText( ++MainActivity.this.i + "" );
MainActivity.this.valueButton.setOnClickListener
( new android.view.View.OnClickListener()
{ @java.lang.Override public void onClick( final android.view.View view )
{ MainActivity.this.valueButton.setText( ++MainActivity.this.i + "" ); }} ); }

/** Eine Anordnung, horizontal. */

android.widget.LinearLayout layout;

/** Initialisiert die Anordnung {@code com.example.MainActivity.this.layout}.
@param context Kontext der Anwendung, fuer welche die Anordnung
{@code com.example.MainActivity.this.layout} bestimmt ist. */

void initLayout( final android.content.Context context )
{ MainActivity.this.layout = new android.widget.LinearLayout( this );
MainActivity.this.layout.addView( MainActivity.this.valueButton ); }

/** Initialisiert dieses MainActivity-Objekt.
@param context Kontext der Anwendung, zu welcher dieses
MainActivity-Objekt gehört. */

void init( final android.content.Context context )
{ initValueButton( context );
initLayout( context ); }

/** Wird bei Erzeugung dieses App aktiviert.
@param bundle Gespeicherter Zustand der App */

@java.lang.Override public void onCreate
( final android.os.Bundle bundle )
{ super.onCreate( bundle );

final android.app.Activity activity = this;
final android.content.Context context = this;
init( context );
enframe( layout, 0xA0000055, 1.0 );
activity.setContentView( MainActivity.this.layout ); }

/** Rahmt ein View-Objekt ein.
@param view Das einzurahmende View-Objekt
@param color Die fuer android.graphics.Paint#setColor(int) zu verwendende Farbe
@param view Die zu verwendende Strichstaerke (1.0 = normal) */

void enframe
( final android.view.View view, final int color, final double width )
{ final android.graphics.drawable.ShapeDrawable rectShapeDrawable
= new android.graphics.drawable.ShapeDrawable
( new android.graphics.drawable.shapes.RectShape() );

{ final android.graphics.Paint paint = rectShapeDrawable.getPaint();
paint.setColor( color );
paint.setStyle( android.graphics.Paint.Style.STROKE );
final android.graphics.Point size = new android.graphics.Point();
getWindowManager().getDefaultDisplay().getSize( size );
paint.setStrokeWidth( ( int )( width / 20 * java.lang.Math.sqrt
( ( double )size.x *( double )size.y ))); }

view.setBackground( rectShapeDrawable ); }}

App
                  .---------------------------------.
|---------------------------------|
| MainActivity |
|---------------------------------|
|.---.############################|
|| 0 |///////////////////////////#|
valueButton ---------o |///////////////////////////#|
|'---'///////////////////////////o-------------- frame
|#///////////////////////////////#|
|#///////////////////////////////#|
|#//////////////////////////o-------------- layout
|#///////////////////////////////#|
|#///////////////////////////////#|
|#///////////////////////////////#|
|#///////////////////////////////#|
|#///////////////////////////////#|
|#################################|
'---------------------------------'

Über die Entwicklereinstellung „Developer Options > Drawing > Show Layout Bounds [v]“ kann auf einigen Android -Geräten eine Umrahmung der Komponenten eingestellt werden.

Zusätzlich zeichnet unser Programm einen Rahmen um den Behälter, damit die Form des Behälters zu erkennen ist. Dazu dient die Methode »enframe«.

Der Zähler/Taster kann verwendet werden wie zuvor.

Waagerechte Behälter

Ein Behälter, deren Inhalte horizontal (waagerecht nebeneinander) nebeneinander angezeigt werden, nennen wir auch einen horizontalen Behälter. Da die horizontale Darstellung schon die Voreinstellung ist, müssen wird hierzu nichts weiter einstellen. Das folgende Programm zeigt das Hinzufügen zweier  Tastflächen zu einem Behälter. Wir drucken hier nicht das ganze neue Programm ab, sondern zeigen nur, wie das voranstehende Programm an zwei Stellen  abzuändern ist.

Vor »android.widget.LinearLayout layout;« einzufügen

/** Eine Tastflaeche zum Zuruecksetzen des Zaehlers. */

android.widget.Button resetButton;

/** Initialisiert die Tastflaeche {@code com.example.MainActivity.this.resetButton}.
@param context Kontext der Anwendung, fuer die die Tastflaeche bestimmt ist */

void initResetButton( final android.content.Context context )
{ MainActivity.this.resetButton = new android.widget.Button( context );
MainActivity.this.resetButton.setGravity
( android.view.Gravity.LEFT | android.view.Gravity.TOP );
MainActivity.this.resetButton.setText( "reset" );
MainActivity.this.resetButton.setOnClickListener
( new android.view.View.OnClickListener()
{ @java.lang.Override public void onClick( final android.view.View view )
{ MainActivity.this.i = -1;
MainActivity.this.valueButton.setText( ++MainActivity.this.i + "" ); }} ); }

Die beiden gleichnamigen Methodendeklaration durch folgende ersetzen

/** Initialisiert die Anordnung {@code com.example.MainActivity.this.layout}.
@param context Kontext der Anwendung, fuer welche die Anordnung
{@code com.example.MainActivity.this.layout} bestimmt ist. */

void initLayout( final android.content.Context context )
{ MainActivity.this.layout = new android.widget.LinearLayout( this );
MainActivity.this.layout.addView( MainActivity.this.valueButton );
MainActivity.this.layout.addView( MainActivity.this.resetButton ); }

/** Initialisiert dieses MainActivity-Objekt.
@param context Kontext der Anwendung, zu welcher dieses
MainActivity-Objekt gehört. */

void init( final android.content.Context context )
{ initValue( context );
initResetButton( context );
initLayout( context ); }

App
.---------------------------------.
|---------------------------------|
| MainActivity |
|---------------------------------|
|.-------------------------------.|
||.---. .-------. ||
||| 0 | | reset | ||
||| | | | ||
||'---' '-------' ||
|| ||
|| ||
|| ||
|| ||
|| ||
|| ||
|| ||
|| layout ||
|'-------------------------------'|
'---------------------------------'

Übungsaufgaben

/   Erweitern des Programms (30 – 60 Minuten)

App
.----------------------------.
|----------------------------|
| MainActivity |
|----------------------------|
|.--------------------------.|
||.------------------------.||
||| 0|||
||'------------------------'||
||.------------------------.||
|||.-----------. .-------. |||
|||| increment | | reset | |||
|||| | | | |||
|||'-----------' '-------' |||
||'------------------------'||
|| hLayout ||
|| ||
|| vLayout ||
|'--------------------------'|
'----------------------------'

Fügen Sie ein Textfeld zu der Oberfläche hinzu! Dieses Textfeld soll sich über  den beiden Tastern befinden. Dies kann erreicht werden, indem das Textfeld und der Behälter mit den Tastern in einen Behälter eingefügt werden, der seine Inhalte übereinander  anordnet. Wir nennen solch einen Behälter auch senkrecht  oder vertikal.

Die Gestaltung kann mit zwei verschachtelten  Behältern erfolgen: Die beiden Taster befinden sich in einem horizontalen  Behälter, und dieser befindet sich wiederum mit einem Text zusammen in einem vertikalen  Behälter.

Fügen Sie also nun zu dem Programm noch ein Textfeld und einen weiteren Behälter (»android.widget.LinearLayout«) hinzu und stellen Sie diesen mit Hilfe des Aufrufs »setOrientation( android.widget.LinearLayout.VERTICAL )« auf „vertikal“ ein. Dieser Behälter soll zwei Objekte enthalten: erstens das neue Textfeld und zweitens den horizontalen Behälter aus dem bisherigen Programm.

Der neue Behälter soll ebenfalls umrahmt  sein und vom Programm angezeigt werden.

Schließlich sollte der Zählerstand  dann in dem Textfeld angezeigt werden und nicht mehr auf dem Taster.

Hinweise:

/   Entfernen der Umrahmung (10 – 20 Minuten)

Entfernen Sie alle Programmteile, die zur Einrahmung der Behälter beitragen. (Entweder in dem Ergebnis der vorherigen Übungsaufgabe oder in einem der obenstehenden Beispielprogramme.)

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722717 stefan_ram:722717 Layouts mit Android Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722717, slrprddef722717, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/layouts_android