2010-05-28 5 views
7

wieder zu verwenden Ich versuche, ein Menü in der Fußzeile einer App zu implementieren, ähnlich wie die Engadget App. Wie ich es verstehe, ist es nicht trivial (wenn überhaupt möglich), ein Standard-TabLayout zu verwenden, um auf diese Weise zu arbeiten.Der beste Weg, um ein Fußzeilenmenü in Android

Da ich einige Apps sehe, die dieses Interface-Paradigma verwenden, würde ich annehmen, dass es einen cleveren Weg dazu gibt. Derzeit definiere ich das Layout, indem ich am Ende jedes Layouts eine Include-Zeile hinzufüge. Dies funktioniert in Bezug auf das Rendering gut, aber ich muss die onClickListeners zu jeder Aktivität hinzufügen. Können wir clickListener über XML definieren?

Um meine Frage zusammenzufassen: Was ist der beste Weg, um eine gemeinsame Fußnavigation über mehrere Aktivitäten zu implementieren?

Antwort

7

Sie können alle Aktivitäten von einer gemeinsamen Basisklasse ableiten, die Activity erweitert und eine Methode zum Erstellen des Menüs einfügt. Verwenden Sie ein RelativeLayout als Hauptcontainer, kleben Sie ein horizontales LinearLayout am unteren Rand (layout_alignParentBottom = "true"), und richten Sie dann Ihren Hauptcontainer "content" (welcher Layouttyp für die jeweilige Aktivität gewünscht wird) darüber aus. Mit Android: Gewicht auf was auch immer Sie in Ihrem Menü (ImageButton, zum Beispiel) und dann Android: WeightSum auf den Container des Menüs, werden sie gleichmäßig verteilt werden. Wenn Sie also vier ImageButtons mit android: weight = "1" haben und das LinearLayout mit android: weightSum = "4", sollten Sie gut sein.

So kann TabContentActivity die Aktivität erweitern, und dann erweitern alle Ihre spezifischen Aktivitäten TabContentActivity. TabContentActivity hat ein onCreate, das super.onCreate aufruft und dann eine private Methode aufruft, um das Menü aufzubauen. Wenn Ihre abgeleiteten Klassen dann super.onCreate in ihrem eigenen onCreate aufrufen, werden Ihre "Tabs" erstellt. Sie können eine Enum in TabContentActivity haben, die jede Registerkarte mit einer lokalen Variablen dieses Enum-Typs darstellt, um festzulegen, welche Registerkarte hervorgehoben wird.

Hören Sie nicht auf Leute, die Ihnen sagen, dass Sie es nicht so machen sollen. Wenn das die von Ihnen gewünschte Benutzeroberfläche ist, werden Sie nicht durch die Umgebung eingeschränkt, in der Sie arbeiten. Genau wie Sie Antworten haben, die Ihnen sagen, dass das nicht der richtige Weg in Android ist, haben Sie auch zwei Ups.

0

Hier ist eine lange gedreht, und ich habe es nie versucht, um zu sehen, ob es funktioniert:

  • eine spezielle Klasse erstellen, die onClick Methoden für die Elemente in der Fußzeile enthält. import diese Klasse in jedem Activity Sie haben;
  • Verwenden Sie android:onClick in Ihrer eingeschlossenen XML-Datei mit Werten, die auf Methoden in dieser Klasse verweisen.

Nun, ich bin nicht sicher, ob diese Klasse in jedem Activity oder instanziiert werden müssten, wenn Sie seine Methoden als statische verwenden können, aber so etwas wie dies funktionieren sollte, und es ist immer noch besser als das Hinzufügen der Zuhörer zu jeder Aktivität.


Meiner Meinung nach (und ich betonen, dass es nur meine Meinung ist), ist diese Schnittstelle Paradigma, wie Sie es nennen, ist ein schlechter Versuch, das iPhone zu kopieren. Dieses Paradigma ist auf dem iPhone sehr populär, hauptsächlich weil es nur einen Knopf hat. Ich hasse sogar die Engadget App dafür (und wieder, es ist von der iPhone App kopiert) - es verschwendet Bildschirm Immobilien.

Kurz gesagt, mein Rat:use the MENU button.


Letzte Anmerkung: nie gespielt um mit einem TabLayout, aber wenn Sie eine separaten Activity in jedem Reiter wollen, dann bin ich 99,9% sicher, dass Sie es nicht tun können (man kann in jedem nicht einbetten ganze Aktivitäten Art von View oder ViewGroup). Die TabLayout beherbergt nur Kind Layout s, keine Aktivitäten. Auch, mit der TabLayout, können Sie sagen, die BACK Taste (Wollen Sie noch verschwenden eine andere Schaltfläche, um eine UI aus dem iPhone zu kopieren?) - Sofern Sie planen, es zu überschreiben, in diesem Fall Sie kann Tschüss zu Ihren Benutzern sagen.

+0

Falsch. TabLayout kann auf jedem Tab eine separate Aktivität haben und ich habe eine App auf dem Markt, die dies tut. – Rich

+0

So können Sie mehrere aktive Aktivitäten gleichzeitig auf dem Bildschirm haben? Gibt es eine Art ViewGroup, die Aktivitätskinder aufnehmen kann? Wenn du recht hast, dann sollte das der richtige Weg sein, obwohl ich immer noch denke, dass die Verwendung von Menüs besser ist, für den Bildschirmplatz, wenn nicht für etwas anderes. – Felix

0

nicht sicher, ob diese Idee durchführbar ist,

ein TabLayout1 in der Fußzeile einstellen, aber es so einrichten, nur die Tabs sichtbar ist, nicht der Inhalt (die unterhalb der Fußzeile gehen würde, in einem unsichtbaren Raum) .
Dann haben Sie eine zweite Sicht auf den Rest des Bildschirms, und Sie können dort Ansichten wechseln. Wenn Sie das zweite Layout (oben) als TabLayout2 festlegen und die Registerkarten an Aktivitäten binden, können Sie diese Ansicht für alle Aktivitäten freigeben. Beachten Sie auch, dass Sie TabLayout2 oben so einrichten müssen, dass die Tabs nicht sichtbar sind, nur der Inhaltsbereich ist sichtbar. Ich denke mit etwas Polsterung kann das gelöst werden.

+0

Klingt wie ein totaler Hack. Ich stimme zu, dass es funktionieren könnte, aber das ändert nichts an seinem Hack-Status. Auch das Starten einer neuen Aktivität beim Klicken auf eine Registerkarte scheint ... nicht benutzerfreundlich zu sein. Ich würde solch eine App hassen. Darüber hinaus wäre es ein Alptraum, das "TabLayout" genau richtig zu positionieren, vor allem angesichts der Vielzahl von Screens und Dichten, die Android unterstützt. – Felix

+0

Das Starten einer neuen Aktivität beim Klicken auf eine Registerkarte ist bereits integriert und Sie können es sehr einfach verwenden. – Pentium10

Verwandte Themen