Farbgestaltung unter Android [] (Farbgestaltung unter Android), Lektion, Seite 723442
https://www.purl.org/stefan_ram/pub/farbgestaltung_android (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Android-Entwicklung

Farbgestaltung unter Android 

Wir fügen nun Teile zum Quelltext hinzu (hier mit »/* neu */« gekennzeichnet), welche die Farben des Programmes an unsere Vorstellungen anpassen sollen.

Bei dieser Gelegenheit wird auch der Titelbalken der Anwendung entfernt.

MainActivity.java
package com.example;

/** Verschiedene statische Hilfsmethoden für Android-Programmierung. */ final class Android
{ /** Laufender Zähler für das Logbuch. Dieser Wert wird wird bei jeder Ausgabe angezeigt und erhöht. */ private static long logcount = 0; /** Pausieren. Ein Aufruf dieser Methode dauert zirka die angegebene Zahl
von Millisekunden.
@param duration Wie viele Millisekunden der Aufruf dauern soll.
(Dieser Wert wird nicht immer zuverlässig eingehalten.) */
private static final void sleep( final int duration )
{ try{ java.lang.Thread.sleep( duration ); }
catch( final java.lang.Exception exception ) {} } /** Ausgabe einer Information in das Logbuch. @param object eine java.lang.Object-Referenz, die wie durch einen Aufruf
der Methode {@link java.lang.String#valueOf(java.lang.Object)} ein
{@link java.lang.String}-Objekt erzeugt, welches dann mit einer
laufenden Numerierung, dem Etikett "com.example" und der Einstufung
als Information in das Logbuch geschrieben wird */
final static void println( final java.lang.Object object )
{ sleep( 50 ); android.util.Log.i
( "com.example", "[" + logcount++ + "] " + java.lang.String.valueOf( object )); } /** Erzeugen eines Parameterbündels zu einer Sichtfläche. Diese Methode liefert ein Parameterbündel zu der als Argument {@code view}
angegebenen Sichtfläche. Falls die Sichtfläche bereits ein
Parameterbündel enthält, so wird dieses zurückgeliefert; ansonsten
wird ein neues Parameterbündel erzeugt und zurückgeliefert,
dessen Breite, Höhe und Gewicht auf Null gesetzt wurden.
@param view eine {@link android.view.View}-Referenz, die nicht gleich null
sein darf
@return ein Parameterobjekt zu der als Argumentwert angegebenen Sichtfläche */ final static android.widget.LinearLayout.LayoutParams getParams( final android.view.View view )
{ final android.view.ViewGroup.LayoutParams old = view.getLayoutParams();
final android.widget.LinearLayout.LayoutParams params = old != null ?
( android.widget.LinearLayout.LayoutParams )old:
new android.widget.LinearLayout.LayoutParams( 0, 0, 0f );
return params; } /** Festlegen der Breite einer Sichtfläche. Diese Methode stellt den Wert für die Breite in den Anordnungsparameter
der Sichtfläche {@code view} auf den Wert {@code width}.
@param view eine {@link android.view.View}-Referenz, die nicht gleich null
sein darf
@param width ein {@code int}-Wert, der für die Breite in den Anordnungsparametern
der angegebenen Sichtfläche zulässig sein muß */
final static void setWidth( final android.view.View view, final int width )
{ final android.widget.LinearLayout.LayoutParams params = getParams( view );
params.width = width; view.setLayoutParams( params ); } /** Festlegen der Höhe einer Sichtfläche. Diese Methode stellt den Wert für die Höhe in den Anordnungsparameter
der Sichtfläche {@code view} auf den Wert {@code height}.
@param view eine {@link android.view.View}-Referenz, die nicht gleich null
sein darf
@param height ein {@code int}-Wert, der für die Höhe in den Anordnungsparametern
der angegebenen Sichtfläche zulässig sein muß */
final static void setHeight( final android.view.View view, final int height )
{ final android.widget.LinearLayout.LayoutParams params = getParams( view );
params.height = height; view.setLayoutParams( params ); } /** Legt das Gewicht einer Sichtfläche fest. Diese Methode stellt den Wert für die Höhe in den Anordnungsparameter
der Sichtfläche {@code view} auf den Wert {@code height}.
@param view eine {@link android.view.View}-Referenz, die nicht gleich null
sein darf
@param height ein {@code int}-Wert, der für die Höhe in den Anordnungsparametern
der angegebenen Sichtfläche zulässig sein muß */
final static void setWeight( final android.view.View view, final float weight )
{ final android.widget.LinearLayout.LayoutParams params = getParams( view );
params.weight = weight; view.setLayoutParams( params ); }}
/** Verschiedene statische Hilfsmethoden, die speziell für diese
App gedacht sind. */
final class Application
{ /** Legt die Hintergrundfarbe für eine Sichtfläche fest. Diese Methode stellt den Wert für die Hintergrundfarbe in der
übergebenen Sichtfläche {@code view} auf die Hintergrundfarbe
dieser Anwendung ein.
@param view eine {@link android.view.View}-Referenz, die nicht gleich null
sein darf */
  final static void applyBackgroundColorTo( final android.view.View view ) /* neu */
{ final int yellow = 0xFFFFFF00; view.setBackgroundColor( yellow ); } /* neu */
  /** Legt die Textfarbe für eine Sichtfläche fest.

  Diese Methode stellt den Wert für die Textfarbe in der 
übergebenen Sichtfläche {@code view} auf die Textfarbe
dieser Anwendung ein.
@param view eine {@link android.view.View}-Referenz, die nicht gleich null
sein darf */
  final static void applyTextColorTo( final android.widget.TextView view ) /* neu */
{ final int black = 0xFF000000; view.setTextColor( black ); } /* neu */
  /** Stellt die Ränder der übergebenen Sichtfläche ein.

  Diese Methode fügt einen kleinen Rand oben und rechts (wenn nicht {@code notRight})
zu einer Tastfläche hinzu und sorgt dadurch dafür, daß der Rand dieser Tastfläche
sichtbar ist.
@param button eine {@link android.widget.Button}-Referenz, die nicht gleich null
sein darf
@param notRight Wenn diese {@link boolean}-Flagge gesetzt ist, so wird kein rechter
Rand hinzugefügt. */
  final static void setMargins( final android.widget.Button button, final boolean notRight ) /* neu */
{ final android.widget.LinearLayout.LayoutParams params = Android.getParams( button ); /* neu */
params.setMargins( 0, 1, notRight ? 0 : 1, 0 ); /* left, top, right, bottom */ /* neu */
button.setLayoutParams( params ); } /* neu */ }
/** Ein Objekt der Klasse {@code TextView} repräsentiert eine
speziell für {@code CounterView} gestaltetes Textfeld zur
Umsetzung der Vorgaben für das Erscheinungsbild des Programmes. */
class TextView extends android.widget.TextView
{ /** Konstruiert ein {@code TextView}-Objekt. @param context Der für das neue Objekt zu verwendende Kontext.
Die Bedeutung des Parameters {@code context} für dieses Objekt ist wie unter
{@link android.view.View#View(android.content.Context)} für {@code View} angegeben. */
public TextView( final android.content.Context context )
{ super( context );
setIncludeFontPadding( false ); } /** Paßt die Textgröße an. Diese Methode wird in anderen Methoden dieser Klasse aufgerufen, um
nach möglichen Änderungen die Textgröße auf die gewünschte Größe zu
skalieren. (Da dieses Textfeld nur für Ziffern gedacht ist, die keine
Unterlängen haben, kann die Ziffer vergrößert werden, um den sonst
für Unterlängen gedachten Raum auszunutzen.) */
private void resizeText()
{ this.setTextSize
( android.util.TypedValue.COMPLEX_UNIT_PX,
this.getMeasuredHeight() * 1.25f ); } /** Paßt die Textgröße an. Diese Methode wird aufgerufen, um es einem View zu erlauben,
seine Größe unter Berücksichtigung der Vorgaben festzulegen.
Wir überschreiben sie hier, um nach der Festlegung der Größe,
unsere {@code resizeText}-Methode aufzurufen. */
@java.lang.Override protected void onMeasure
( final int widthMeasureSpec, final int heightMeasureSpec )
{ super.onMeasure( widthMeasureSpec, heightMeasureSpec ); resizeText(); } /** Reagiert auf Veränderung des Textes. Diese Methode wird aufgerufen, wenn ein neuer Text festgelegt
wurde.
Wir überschreiben sie hier, um nach der Festlegung eines neuen
Textes unsere {@code resizeText}-Methode aufzurufen. */
@java.lang.Override protected void onTextChanged
( final CharSequence text, final int start,
final int before, final int after ){ resizeText(); } /** Reagiert auf Veränderung der Größe. Diese Methode wird aufgerufen, wenn eine neue Größe für das
View festgelegt wurde.
Wir überschreiben sie hier, um nach der Festlegung einer neuen
Größe unsere {@code resizeText}-Methode aufzurufen. */
@java.lang.Override protected void onSizeChanged
( final int width, final int height, final int oldWidth,
final int oldHeight ){ if( height != oldHeight )resizeText(); } /** {@inheritDoc} Hier wird die Farbe und Schriftposition dieses TextViews angepaßt. */ @java.lang.Override
protected void onDraw( final android.graphics.Canvas canvas )
{
    Application.applyBackgroundColorTo( this ); /* neu */
Application.applyTextColorTo( this ); /* neu */
    canvas.save();

    { canvas.translate( 0.0f, this.getMeasuredHeight() * 0.28f );
if( getLayout() != null )getLayout().draw( canvas );
canvas.restore(); }}} /** Ein Objekt der Klasse {@code CounterView} repräsentiert eine
speziell für dieses Programm gestaltete Anzeige für einen Zähler. */
final class CounterView extends TextView
{ private int i = -1; /** Zurücksetzen des Zählers. Diese Methode stellt den Wert des Zählers auf {@code 0} zurück. */ private void reset() { CounterView.this.i = -1; CounterView.this.increment(); } /** Inkrementieren des Zählers. Diese Methode erhöht den Wert des Zählers um {@code 1}. */ private void increment() { CounterView.this.setText( ++CounterView.this.i + "" ); } /** Ergibt einen Klickempfänger, der diesen Zähler bei einem Klick zurücksetzt. @return ein Klickempfänger, der diesen Zähler bei einem Klick zurücksetzt */ android.view.View.OnClickListener resetListener()
{ return new android.view.View.OnClickListener()
{ @java.lang.Override public void onClick( final android.view.View view )
{ CounterView.this.reset(); }}; } /** Ergibt einen Klickempfänger, der diesen Zähler bei einem Klick inkrementiert. @return ein Klickempfänger, der diesen Zähler bei einem Klick inkrementiert */ android.view.View.OnClickListener incrementListener()
{ return new android.view.View.OnClickListener()
{ @java.lang.Override public void onClick( final android.view.View view )
{ CounterView.this.increment(); }}; } /** Konstruiert ein {@code CounterView}-Objekt. @param context Der für das neue Objekt zu verwendende Kontext.
Die Bedeutung des Parameters {@code context} für dieses Objekt ist wie unter
{@link android.view.View#View(android.content.Context)} für {@code View} angegeben. */
CounterView( final android.content.Context context )
{ super( context );
CounterView.this.setGravity( android.view.Gravity.RIGHT | android.view.Gravity.BOTTOM );
Android.setWidth( CounterView.this, android.view.ViewGroup.LayoutParams.MATCH_PARENT );
Android.setHeight( CounterView.this, 0 );
Android.setWeight( CounterView.this, 1f );
CounterView.this.increment(); }}

/** Ein Objekt der Klasse {@code Button} repräsentiert eine
speziell für dieses Programm gestaltete Tastfläche. */
final class Button extends android.widget.Button
{ /** Konstruiert ein {@code Button}-Objekt. @param context Der für das neue Objekt zu verwendende Kontext.
Die Bedeutung des Parameters {@code context} für dieses Objekt ist wie unter
{@link android.view.View#View(android.content.Context)} für {@code View} angegeben.
@param label die Beschriftung dieses Objektes @param listener der bei einem Klick auf diese Tastfläche zu benachrichtigende Klickempfänger @param isReset gibt an, ob dies die Tastfläche zum Zurücksetzen des Zählers werden soll. */ Button
( final android.content.Context context,
final java.lang.CharSequence label,
final android.view.View.OnClickListener listener,
    final boolean isReset /* neu */
    ) 
{ super( context );
    Application.applyBackgroundColorTo( Button.this ); /* neu */
Application.applyTextColorTo( Button.this ); /* neu */
Application.setMargins( Button.this, isReset ); /* neu */
    Button.this.setGravity( android.view.Gravity.LEFT | android.view.Gravity.TOP  );
Android.setWidth( Button.this, 0 );
Android.setHeight( Button.this, android.view.ViewGroup.LayoutParams.MATCH_PARENT );
Android.setWeight( Button.this, 1f );
Button.this.setText( label );
Button.this.setOnClickListener( listener ); }}

/** Ein Objekt der Klasse {@code HorizontalLayout} repräsentiert eine
speziell für dieses Programm gestaltete horizontale Anordnung. */
final class HorizontalLayout extends android.widget.LinearLayout
{ /** Konstruiert ein {@code HorizontalLayout}-Objekt. @param context Der für das neue Objekt zu verwendende Kontext.
Die Bedeutung des Parameters {@code context} für dieses Objekt ist wie unter
{@link android.view.View#View(android.content.Context)} für {@code View} angegeben. */
HorizontalLayout
( final android.content.Context context )
{ super( context );
Android.setWidth( HorizontalLayout.this, android.view.ViewGroup.LayoutParams.MATCH_PARENT );
Android.setHeight( HorizontalLayout.this, 0 );
Android.setWeight( HorizontalLayout.this, 1f ); }}

/** Ein Objekt der Klasse {@code VerticalLayout} repräsentiert eine
speziell für dieses Programm gestaltete vertikale Anordnung. */
final class VerticalLayout extends android.widget.LinearLayout
{ /** Konstruiert ein {@code VerticalLayoutLayout}-Objekt. @param context Der für das neue Objekt zu verwendende Kontext.
Die Bedeutung des Parameters {@code context} für dieses Objekt ist wie unter
{@link android.view.View#View(android.content.Context)} für {@code View} angegeben. */
VerticalLayout
( final android.content.Context context )
{ super( context );
VerticalLayout.this.setOrientation( android.widget.LinearLayout.VERTICAL );
Android.setWidth( VerticalLayout.this, android.view.ViewGroup.LayoutParams.MATCH_PARENT );
Android.setHeight( VerticalLayout.this, android.view.ViewGroup.LayoutParams.MATCH_PARENT );
Android.setWeight( VerticalLayout.this, 0f ); }}

/** Eine Aktivität, die einen bedienbaren Zähler implementiert. */ public final class MainActivity extends android.app.Activity
{ /** Diese Methode erstellt den Objektgraphen der Aktivität. @param bundel ein Bündel, dessen Bedeutung durch Android festgelegt ist */ @java.lang.Override public void onCreate
( final android.os.Bundle bundle )
{ super.onCreate( bundle );
Android.println( "running" ); final android.app.Activity activity = this;
final android.content.Context context = this;
    activity.requestWindowFeature( android.view.Window.FEATURE_NO_TITLE ); /* neu */
    final CounterView counterView = new CounterView( context );
    final Button incrementButton = new Button( context, "increment", counterView.incrementListener(), false /* neu */ );
final Button resetButton = new Button( context, "reset", counterView.resetListener(), true /* neu */ );
    final HorizontalLayout horizontalLayout = new HorizontalLayout( context );
final android.widget.LinearLayout verticalLayout = new VerticalLayout( context ); horizontalLayout.addView( incrementButton );
horizontalLayout.addView( resetButton ); verticalLayout.addView( counterView );
verticalLayout.addView( horizontalLayout ); activity.setContentView( verticalLayout ); }}

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 stefanram723442 stefan_ram:723442 Farbgestaltung unter Android Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723442, slrprddef723442, 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/farbgestaltung_android