Jestem stosunkowo nowy w rozwoju interfejsu użytkownika Androida. Potrzebuję więc pomocy od bardziej doświadczonych programistów.
Tworzę swoją aplikację z Navigation Drawer
, miałem do czynienia z wieloma problemami.
Po pierwsze, oto przykładowy kod szuflady nawigacji.Szuflada nawigacji wiele kontenerów i najlepsza praktyka
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
To prosty przykład z oficjalnej strony.
Główny widok zawartość (the FrameLayout powyżej) musi być pierwszym dzieckiem w DrawerLayout ponieważ kolejność XML zakłada uporządkowanie i z-szuflada musi być na wierzchu zawartości.
W tym przykładzie istnieją dwa zagnieżdżone odsłony: FrameLayout
jak wspomniano do przechowywania główną treść i ListView
za reprezentowanie NavigationDrawer
menu wcześniej.
Oto moje pytania.
- Prawdziwa aplikacja nie ma tylko jednego widoku na całą aktywność. Przeważnie aktywność ma wiele różnych widoków i kilka fragmentów, aby interfejs był bardziej responsywny i zapewniał użytkownikowi lepszy UX. Moje działania to oczywiście różne poglądy i fragmenty (jaki jest cel tych samych Działań? :)). Jedna czynność ma tylko jeden fragment, inny ma kilka fragmentów, więc są WSZYSTKIE różne ... W poprzednim przykładzie kodu jest TYLKO JEDEN
FrameLayout
pojemnik do przechowywania Fragment TYLKO JEDEN fragment, co muszę zrobić, jeśli moja Aktywność ma dwa, trzy lub więcej fragmentów? Jakie jest najlepsze rozwiązanie w tym przypadku. - Tak jak opisywałem, moja aplikacja ma wiele działań, więc moja szuflada nawigacji musi być zgodna z praktyką interfejsu użytkownika Androida w każdym działaniu, aby umożliwić użytkownikowi nawigację do elementów najwyższego poziomu aplikacji. W tym przypadku lepiej jest mieć jeden
BaseActivity
(czytałem odpowiedzi tutaj na stackoverflow), który będzie przechowywać wszystkie rzeczy konfiguracyjne dlaNavigationDrawer
. Ale w zakresie, w jakim Navigation Drawer wymagaDrawerLayout
w formacie XML działania,BaseActivity
powinien wywołać metodęsetContentView
. A wszystko odziedziczone poBaseActivity
aktywności powinno zrobić kilka sztuczek, aby ustawić własny układ, lub nie ma sensu, aby zastąpić tę metodę, ponieważ złamie całą logikę. Co robić w tym przypadku? - Jaki jest najbardziej efektywny sposób tworzyć niestandardowe listy szuflady nawigacji jak w google + lub YouTube bez użycia skomplikowanej hierarchii widok, który sprawia, GPU ciężko pracować i może przynieść użytkownika złe doświadczenia
Na drugi problem mam kilka pomysłów, jak mogę to rozwiązać, ale nie wiem, czy to jest poprawny sposób i jakie podejście jest lepsze.
Pierwszym pomysłem jest wdrożenie szablonu TemplateMethod. Utwórz metodę w stylu BaseActivity
coś podobnego do setupCustomViewGroup()
i nadpisaj ją we wszystkich działaniach nadmuchując żądaną grupę view z xml i zwróć ją z tej metody, a następnie użyj jej do nadmuchania całego widoku.
Lub bezpośrednio dodaj widok do działania, użyj znacznika scalania i dołączania.
Ale może to być pomocne tylko dla całej aktywności lub jednego fragmentu, co zrobić, jeśli mamy więcej fragmentów, użyj zagnieżdżonych fragmentów, myślę, że to zły pomysł.
Ponadto moim celem jest optymalizacja hierarchii widoków, aby była szybka i wydajna, aby zapewnić płynność nawet na starych urządzeniach.
Będę bardzo wdzięczny każdemu, kto potrafi opisać lub zaproponować najbardziej efektywny i prawidłowy sposób postępowania w tym przypadku, aby interfejs był responsywny, a kod czytelny.
Dziękuję.