Android benutzerdefiniertes Layout

Ich habe gestern irgendwann mit Android-Layouts (... oder besser mit benutzerdefinierten Layouts) gekämpft. Für allgemeine Zwecke bilden die Out-of-the-Box-Layouts, die Androids anbietet, mehr als genug. Aber wenn es um komplexere Anwendungsfälle geht (nehmen wir das Karussell mit der Überlappung von Bildern, die auf einem elliptischen Pfad liegen), habe ich schnell die Einschränkung und Komplexität von Android-APIs erkannt. Das war mein Ansatz:

Out-of-the-Box-Layouts zu verwenden ist keine Option (um viele nicht zu handhabende Probleme zu lösen), es müssen jedoch grafische Objekte zu einem Container hinzugefügt werden (zum Beispiel ImageView), um die Übersetzung und Drehung zu vereinfachen , etc ... durch eingebaute Animation.

The AbsoluteLayout scheint das vernünftigste Layout zu sein, das für diesen Zweck verfügbar ist. Sie können abgeleitete Ansichtsobjekte hinzufügen und Ihren eigenen Algorithmus schreiben, um sie zu positionieren. Aber ... es ist veraltet. Das ist eine Schande! Wer möchte veraltete apis verwenden?

Das nächst vernünftigste ist, ein eigenes Layout zu schreiben, das die mystische ViewGroup unterordnet. Und hier fällt alles auseinander (zumindest für mich). Es ist kompliziert, irreführend und schwierig, so viel zu tun wie es ist, ein eigenes Layout für den Swing zu schreiben (ich habe es tatsächlich vor Jahren getan, und ich erinnere mich, einfacher zu sein).

Dann (aus Verzweiflung) scheint es die einzig einfache Lösung zu sein, eine Ansicht in Unterklassen zu unterteilen, die onDraw-Methode zu überschreiben und direkt auf einem Canvas zu zeichnen (obwohl dies mich an die Tage von java2D erinnert ... lange Stunden, um die hohen 1% von zu erreichen Ihr Projekt), aber dann geben Sie die praktischen integrierten Animations-APIs auf, die Sie auf die auf der Zeichenfläche gezeichneten Grafiken anwenden möchten.

Die Schlussfolgerung ist, dass die aktuelle Android-Architektur, sofern ich nichts verpasst habe, ein wenig vom Programmierparadigma anderer UI-Technologien wie Flash oder Javafx abweicht (ich kann das oben beschriebene Karussell problemlos in Javafx und Flash implementieren). Der Grund dafür ist, dass beispielsweise in Javafx das Scene-Objekt (vergleichbar mit dem View-Konzept von Android) standardmäßig ein absolutes Layout bietet. Sie können dann andere Standardlayouts anwenden, wenn Sie möchten. In Szenarien, in denen ein benutzerdefiniertes Layout erforderlich ist, müssen Sie jedoch nichts unternehmen.

Ich bin ein bisschen überrascht, dass diese Option in Android nicht verfügbar ist, schließlich ist ein recht häufiges Bedürfnis, das von anderen UI-Technologien angesprochen wird. Ich denke immer noch, dass es eine fünfte Option in Android gibt, die ich nicht gefunden habe. Gibt es Experten, die Informationen zum Thema liefern könnten?

Vielen Dank

Antworten auf die Frage(8)

Ihre Antwort auf die Frage