Dieses Kapitel behandelt die Verwendung von Buttons bzw. Schaltflächen. Android stellt verschiedene Klassen von Schaltflächen, die im Folgenden kurz vorgestellt werden, zur Verfügung.

Die Android Button Klassen

Android Button Beispiel App

  • Button
    Eine gewöhnliche Schaltfläche mit Beschriftung.
  • ImageButton
    Zeigt ein Bild anstelle einer Beschriftung.
  • ToggleButton
    Eine Schaltfläche die ähnlich einer CheckBox zwei Zustände annehmen kann. Der Zustand kann über die Methode isChecked() abgefragt und mit der Methode setChecked() gesetzt werden.
  • Switch
    Die Klasse Switch ist ab Android 4.0 verfügbar und stellt einen Button, der zwei Zustände annehmen kann, zur Verfügung.
  • RadioButton
    Wird zum Anzeigen von sich gegenseitig ausschließenden Optionen verwendet. Hierzu werden mehrere RadioButtons in einer RadioGroup zusammengefasst. Wird ein RadioButton aktiviert werden alle anderen RadioButtons der gleichen RadioGroup deaktiviert. Die Methoden setChecked() und isChecked() werden zum Setzen bzw. zum Abfragen, ob ein RadioButton gesetzt ist, verwendet.
  • CheckBox
    Klassische Checkbox bzw Kontrollkästchen, das entweder angekreuzt oder leer sein kann. Der Zustand kann über die Methode isChecked() abgefragt und mit der Methode setChecked() gesetzt werden.
 

Reaktion auf Benutzereingaben:

Zur Reaktion auf eine Benutzereingabe wird einem Steuerelement eine Referenz einer Listener-Schnittstelle (Interface) übergeben (z.B. View.OnClickListener oder CompoundButton.OnCheckedChangeListener), deren Methoden nach einer Eingabe aufgerufen werden.

Die Listener Schnittstelle kann entweder als anonyme Klasse oder im Aktivity implementiert werden. Hierzu folgt nun jeweils ein Beispiel:

Listener als anonyme Klasse:

Im folgendem Beispielcode wird für die Schaltfläche “b” eine anonyme Klasse (basierend auf dem Interface OnClickListener) zur Reaktion auf Benutzereingaben instanziiert:

Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.i("Schulung", "Button gedrückt");
    }
});

Da OnClickListener eigens für das Objekt “b” instantziiert wird, enthält der Parameter “v” der Methode onClick() immer eine Referenz auf das Objekt “b”.

Listener im Activity

Wenn mehrere Steuerelemente Listener vom gleichen Typ implementieren, empfiehlt es sich, die Listener-Schnittstelle im Activity zu implementieren. Das bringt die Vorteile, dass der Sourcecode dadurch kürzer wird, die Ausführung während der Instanziierung der Klasse schneller erfolgt und alle Benutzereingaben in einer Methode abgearbeitet werden.
Im folgendem Beispiel wird das Activity um die Implementierung der OnClickListener Schnittstelle erweitert und gezeigt, wie die Quelle der Eingabe ermittelt werden kann:

    public class MainActivity extends Activity implements OnClickListener {
	Button buttonRot;
	Button buttonBlau;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		buttonRot = (Button) findViewById(R.id.buttonRot);
		buttonRot.setOnClickListener(this);
		buttonBlau = (Button) findViewById(R.id.buttonBlau);
		buttonBlau.setOnClickListener(this);
	}
	
	@Override
	public void onClick(View v) {
		if (v == buttonRot) {
			Log.i("Schulung", "Rot Referenz");
		} else if (v == buttonBlau) {
			Log.i("Schulung", "Blau Referenz");
		}
		
		if (v.getId() == R.id.buttonRot) {
			Log.i("Schulung", "Rot ID");
		} else if (v.getId() == R.id.buttonBlau) {
			Log.i("Schulung", "Blau ID");
		}
	}
};
  • In Zeile 1 wird die Activity Klasse um die OnClickListener Schnittstelle erweitert, woraufhin die Klasse nun die Methode onClick (Zeile 17) implementieren muss.
  • In onCreate() werden in den Zeilen 11 und 13 die Listener an den Schaltflächen angemeldet, indem die Instanz der eigenen Klasse (this), übergeben wird.
  • Die Methode onClick(), die nach einem Klick auf die Schaltflächen aufgerufen wird, zeigt zwei Möglichkeiten, wie die Quelle des Klick-Ereignis festgestellt werden kann:
    • In Zeile 18 und 20 wird geprüft, ob der Parameter v mit einem der Objekte der Klasse Button übereinstimmt.
    • In den Zeilen 24 und 26 wird die id des Parameters v mit den bekannten ids der Schaltflächen verglichen.