Ich habe eine Schaltfläche Grafik, die "drücken und halten" -Funktion haben muss, so dass ich OnClickListener verwenden, verwende ich onTouchListener so dass die App auf"Drücken und halten" -Taste auf Android muss Status ändern (benutzerdefinierte XML-Selektor) mit OnTouchListener
reagieren könnenMotionEvent.ACTION_DOWN,
und
MotionEvent.ACTION_UP
Je nachdem, wie schnell diese beiden Ereignisse ausgelöst werden, kann ich eine „pressAndHoldHandler“ in der Zeit zwischen den beiden laufen.
Wie auch immer, lange Geschichte kurz: Ich habe zahlreiche "grundlegende" Schaltflächen in der gleichen App, die nicht die drücken und halten-Funktion benötigen, so dass sie den onClickListener verwenden.
Jeder einzelne dieser Tasten haben grafisch mit ihrer eigenen XML-Selektor-Datei angepasst worden:
<?xml version="1.0" encoding="UTF-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@drawable/btn_chicken_off" />
<item
android:state_enabled="true"
android:state_pressed="true"
android:drawable="@drawable/btn_chicken_s3" />
<item
android:state_enabled="true"
android:state_focused="true"
android:drawable="@drawable/btn_chicken_s2" />
<item
android:state_enabled="true"
android:drawable="@drawable/btn_chicken_off" />
</selector>
Also, das Problem hier ist: Die obige Selektor erhält nicht mit dem onTouchListener abgerufen. Nur der onClickListener zieht die Statusänderungen mit dem onClick() - Abschnitt seiner eigenen Methode ein, sodass diese "Drücken und Halten" -Schaltflächen den Status nie ändern. Ziemlich schreckliches Feedback für den Benutzer.
Ich zwinge zur Zeit der oben innerhalb des Schaltergehäuses von ACTION_DOWN und ACTION_UP durch folgende Maßnahmen:
if (action == MotionEvent.ACTION_DOWN) {
btn_chicken.setBackgroundResource(R.drawable.btn_chicken_s3);
}
else
if (action == MotionEvent.ACTION_UP) {
btn_chicken.setBackgroundResource(R.drawable.btn_chicken_off);
}
Aber es scheint wie ein Hack, und es ist die „fokussierte aber nicht gedrückt“ Bühne fehlt.
Hat jemand schon einmal darüber gestolpert?
Das war genau mein Problem. Danke für die gute Beschreibung. – Suragch