Erscheinungsbild des Textfeldes unter Android
Ein angepaßtes Textfeld
Das Textfeld für die Anzeige der Zahl sieht noch nicht so aus, wie dies ursprünglich geplant war. Beispielsweise ist die angezeigte Zahl auf den meisten Geräten noch zu klein.
Um das Erscheinungsbild des Textfeldes an den ursprünglichen Plan anzupassen, schreiben wir eine angepaßte Klasse für das Textfeld.
- Angepaßte Textfeldklasse
/** 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 Schriftposition angepaßt. */
@java.lang.Override
protected void onDraw( final android.graphics.Canvas canvas )
{ canvas.save();
{ canvas.translate( 0.0f, this.getMeasuredHeight() * 0.28f );
if( getLayout() != null )getLayout().draw( canvas );
canvas.restore(); }}}
Je mehr das Erscheinungsbild eines Programmes an bestimmte Vorstellungen angepaßt wird, desto empfindlicher wird das Programm allerdings gegenüber Variationen seiner Umgebung. Bei dem obigen Programm ist es möglich, daß die eingestellten Verschiebungen und Vergrößerungen der Schriftart unter manchen Umständen dazu führen können, daß der Text nicht mehr richtig angezeigt wird. Daher ist es bei solchen Programmen wichtiger, sie unter verschiedenen Geräten zu prüfen als bei Programmen, die einfach alle vorgegebenen Standards übernehmen.
Übungsaufgaben
/ Einbau der neuen Klasse
Fügen Sie die in dieser Lektion vorgestellte Klassendeklaration an einer geeigneten Stelle in das Programm der vorherigen Lektion ein und passen Sie es so an, daß die eingefügte Klassendeklaration zur Anzeige der Zahl verwendet wird.