View Eventlistener
| Event | Description |
|---|---|
onClickListener | Wird verwendet, um die kurze Berührung eines Views zu erkennen. |
onCreateContextMenuListener | Wartet auf die Erstellung eines Kontextmenüs als Ergebnis eines langen Klicks. |
onDragListener | Wird verwendet, wenn Views von einer Position zu einer zweiten gezogen werden. |
onFocusChangedListener | Erkennt, wenn sich der Fokus als Ergebnis einer Interaktion ändert. |
onGenericMotionEvent | Verwendung unterschiedlicher Gesten. |
onHoverListener | Erkennt Bewegungen über einem View. Wird nicht bei Smartphones ausgelöst. |
onKeyListener | Wird verwendet, ob eine Taste gedrückt wurde. Wird nicht ausgelöst bei einem SmartKeyboard. |
onLongClickListener | Ein View wird für längere Zeit berührt. |
onTouchListener | Berührung eines Views mit einem oder mehreren Berührpunkten oder mittels Gestenbewegungen. |
Listener mit Anonymen Objekt
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
...
protected void onCreate(Bundle savedInstanceState) {
...
binding.btnEvents.setOnClickListener(
new Button.OnClickListener(){
@Override
public void onClick(View v) {
if (!binding.btnEvents.getText().equals("Click me!")){
binding.btnEvents.setText("Click me!");
} else {
binding.btnEvents.setText("Clicked");
}
}
}
);
...
}
...
}Listener mit Eventhandler-Klasse
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
...
protected void onCreate(Bundle savedInstanceState){
...
binding.btnEvents.setOnClickListener(new EventHandlers());
...
}
private class EventHandlers implements Button.OnClickListener{
@Override
public void onClick(View v) {
if (!binding.btnEvents.getText().equals("Click me!")) {
binding.btnEvents.setText("Click me!");
} else {
binding.btnEvents.setText("Clicked");
}
}
...
}
...
}Listener mit Activity-Klasse
public class MainActivity extends AppCompatActivity implements Button.OnClickListener{
ActivityMainBinding binding;
...
protected void onCreate(Bundle savedInstanceState) {
...
binding.btnEvents.setOnClickListener(this);
...
}
@Override
public void onClick(View v) {
if (!binding.btnEvents.getText().equals("Click me!")) {
binding.btnEvents.setText("Click me!");
} else {
binding.btnEvents.setText("Clicked");
}
}
}Multi Touch Events
binding.myLayout.setOnTouchListener(
new ConstraintLayout.OnTouchListener() {
public boolean onTouch(View v, MotionEvent m){
int pointerCount = m.getPointerCount();
int pointerId = m.getPointerId(0);
int pointerIndex = m.findPointerIndex(pointerId);
...
return true;
}
}
);Return Wert
Ist der Rückgabewert der
onTouch()-Methodetruebedeutet das, dass das Event nicht verarbeitet wurde und weitergereicht wird. Ist der Rückgabewertfalse, wurde das Event verarbeitet und ist damit beendet.
Beispiel
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/myLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvAnzeige1"
android:layout_width="317dp"
android:layout_height="24dp"
android:text="Anzeigefeld 1"
app:layout_constraintBottom_toTopOf="@+id/tvAnzeige2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.14"
app:layout_constraintVertical_chainStyle="packed"
/>
<TextView
android:id="@+id/tvAnzeige2"
android:layout_width="317dp"
android:layout_height="24dp"
android:text="Anzeigefeld2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvAnzeige1"
app:layout_constraintVertical_bias="0.237"
/>
</androidx.constraintlayout.widget.ConstraintLayout>public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
binding.myLayout.setOnTouchListener(
new ConstraintLayout.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
handleTouch(event);
return true;
}
}
);
}
public void handleTouch(MotionEvent event){
binding.tvAnzeige1.setText("");
binding.tvAnzeige2.setText("");
int pointerCount = event.getPointerCount();
for (int i = 0; i < pointerCount; i++) {
int x = (int) event.getX(i);
int y = (int) event.getY(i);
int id = event.getPointerId(i);
int action = event.getActionMasked();
int actionIndex = event.getActionIndex();
String actionString;
switch (action) {
case MotionEvent.ACTION_DOWN:
actionString = "DOWN";
break;
case MotionEvent.ACTION_UP:
actionString = "UP";
break;
case MotionEvent.ACTION_POINTER_DOWN:
actionString = "PNTR DOWN";
break;
case MotionEvent.ACTION_POINTER_UP:
actionString = "PNTR UP";
break;
case MotionEvent.ACTION_MOVE:
actionString = "MOVE";
break;
default:
actionString = "";
}
String touchStatus ="Pointer:" + i + " Action: " + actionString + "A-Index: " + actionIndex + " ID: " + id + "\n X: " + x + " Y: " + y;
switch (i) {
case 0:
binding.tvAnzeige1.setText(touchStatus);
break;
case 1:
binding.tvAnzeige2.setText(touchStatus);
break;
}
}
}
}