Jakie jest zastosowanie LayoutInflater
w Androidzie?
android
layout-inflater
android-inflate
użytkownik386430
źródło
źródło
Odpowiedzi:
Kiedy używasz niestandardowego widoku w
ListView
, musisz zdefiniować układ wiersza. Tworzysz plik XML, w którym umieszczasz widżety Androida, a następnie w kodzie adaptera musisz zrobić coś takiego:Przeczytaj więcej w oficjalnej dokumentacji .
źródło
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
jest a , chociaż wyjaśnia, gdzie jej użyć. Odpowiedź 1-dół jest lepsza.The LayoutInflater klasa służy do wystąpienia zawartości plików XML układ do ich odpowiednich Zobacz obiektów.
Innymi słowy, pobiera plik XML jako dane wejściowe i buduje z niego obiekty View.
źródło
single_list_item.xml
plik dla każdej liniiListView
. Czy użycie tego pliku XML jest jak inflator?Co ma
LayoutInflator
zrobić?Kiedy zaczynałem programować na Androida, byłem naprawdę zdezorientowany przez
LayoutInflater
ifindViewById
. Czasami używaliśmy jednego, a czasem drugiego.LayoutInflater
służy do tworzenia nowegoView
(lubLayout
) obiektu z jednego z układów xml.findViewById
po prostu daje odniesienie do widoku, który został już utworzony. Można by pomyśleć, że nie utworzono jeszcze żadnych poglądów, ale gdy nazywaszsetContentView
sięonCreate
, układ aktywności użytkownika wraz z jego subviews zostanie nadmuchany (stworzony) za kulisami.Więc jeśli widok już istnieje, użyj
findViewById
. Jeśli nie, utwórz go za pomocąLayoutInflater
.Przykład
Oto mój mały projekt, który pokazuje zarówno w akcji, jak
LayoutInflater
ifindViewById
w akcji. Bez specjalnego kodu układ wygląda następująco.Niebieski kwadrat to niestandardowy układ wstawiony do głównego układu za pomocą
include
(patrz tutaj, aby uzyskać więcej). Został on zawyżony automatycznie, ponieważ jest częścią widoku zawartości. Jak widać, w kodzie nie ma nic specjalnego.Teraz napompujmy (utwórz) kolejną kopię naszego niestandardowego układu i dodaj go.
Aby napompować nowy układ widoku, wszystko, co zrobiłem, to powiedzieć inflatorowi nazwę mojego pliku xml (
my_layout
), układ nadrzędny, do którego chcę go dodać (mainLayout
), i że tak naprawdę nie chcę go jeszcze dodawać (false
) . (Mógłbym również ustawić element nadrzędny nanull
, ale wówczas parametry układu widoku głównego mojego niestandardowego układu zostaną zignorowane).Tutaj znów jest w kontekście.
Zauważ, że
findViewById
jest używany tylko po zawyżeniu układu.Kod uzupełniający
Oto xml dla powyższego przykładu.
Activity_main.xml
my_layout.xml
Kiedy potrzebujesz LayoutInflater
RecyclerView
. (Zobacz teRecyclerView
przykłady, aby uzyskać listę lub siatkę .) Musisz nadmuchać nowy układ dla każdego widocznego elementu na liście lub siatce.źródło
myLayout
to widok, chociaż mogłem go zawyżać jako RelativeLayout (patrz my_layout.xml). Po nadmuchaniu dodaję go jako widok podrzędny elementu nadrzędnego LinearLayout (to znaczymainLayout
).LayoutInflater.inflate () zapewnia sposób na konwersję pliku res / layout / *. Xml definiującego widok na rzeczywisty obiekt View możliwy do użycia w kodzie źródłowym aplikacji.
podstawowe dwa kroki: zdobądź inflator, a następnie napompuj zasób
Jak zdobyć inflator?
Jak uzyskać widok przy założeniu, że plik xml to „list_item.xml”?
źródło
Oto kolejny przykład podobny do poprzedniego, ale rozszerzony w celu dalszego wykazania parametrów nadmuchiwania i zachowania dynamicznego, które może zapewnić.
Załóżmy, że układ wiersza ListView może mieć zmienną liczbę TextView. Najpierw napompujesz element podstawowy Widok (tak jak w poprzednim przykładzie), a następnie zapętlisz dynamicznie dodając TextViews w czasie wykonywania. Korzystanie z Androida: layout_weight dodatkowo wszystko idealnie wyrównuje.
Oto zasoby Layouts:
list_layout.xml
schedule_layout.xml
Przesłoń metodę getView w rozszerzeniu klasy BaseAdapter
Zwróć uwagę na różne wywołania metody inflacji:
źródło
Ta klasa służy do tworzenia pliku XML układu w odpowiadających mu
View
obiektach. Nigdy nie można go używać bezpośrednio - użyjgetLayoutInflater()
lubgetSystemService(String)
pobierz standardowąLayoutInflater
instancję, która jest już podłączona do bieżącego kontekstu i poprawnie skonfigurowana dla urządzenia, na którym pracujesz. Na przykład:Odniesienie: http://developer.android.com/reference/android/view/LayoutInflater.html
źródło
Napompowanie oznacza odczytanie pliku XML opisującego układ (lub element GUI) i utworzenie rzeczywistych obiektów, które mu odpowiadają, a tym samym uczynienie obiektu widocznym w aplikacji na Androida.
Ten plik można zapisać jako date_time_dialog.xml :
Ten plik można zapisać jako date_time_picker.xml :
MainActivity
Klasa zapisany jako MainActivity.java :źródło
Co robi inflator
Pobiera układ xml jako dane wejściowe (powiedzmy) i konwertuje go na obiekt View.
Dlaczego potrzebny
Pomyślmy o scenariuszu, w którym musimy stworzyć niestandardowy widok listy. Teraz każdy wiersz powinien być niestandardowy. Ale jak możemy to zrobić. Nie można przypisać układu xml do wiersza widoku listy. Tworzymy obiekt View. W ten sposób możemy uzyskać dostęp do elementów w nim zawartych (widok tekstu, widok obrazu itp.), A także przypisać obiekt jako wiersz widoku listy
Tak więc, ilekroć musimy gdzieś przypisać obiekt typu widoku i mamy nasz niestandardowy projekt xml, po prostu przekształcamy go w obiekt przez inflator i używamy go.
źródło
LayoutInflater to klasa używana do tworzenia instancji pliku XML układu w odpowiadających mu obiektach widoku, które mogą być używane w programach Java. Mówiąc prościej, istnieją dwa sposoby tworzenia interfejsu użytkownika w Androidzie. Jeden jest statyczny, a drugi dynamiczny lub programowo. Załóżmy, że mamy prosty układ main.xml mający jeden
textview
i jedenedittext
w następujący sposób.Możemy wyświetlić ten układ w sposób statyczny
Dynamiczny sposób tworzenia widoku oznacza, że widok nie jest wspomniany w naszym pliku main.xml, ale chcemy to pokazać w czasie wykonywania. Na przykład mamy inny plik XML w folderze układu jako footer.xml
Chcemy pokazać to pole tekstowe w czasie wykonywania w naszym głównym interfejsie użytkownika. Więc tutaj napompujemy text.xml. Zobacz jak:
Tutaj użyłem getSystemService (String), aby pobrać instancję LayoutInflater. Mogę również użyć metody getLayoutInflator (), aby napompować, zamiast metody getSystemService (String), jak poniżej:
źródło
oto przykład uzyskiwania odwołania do widoku głównego układu, nadmuchiwania go i używania go z setContentView (widok widoku)
źródło
Layout inflater to klasa, która odczytuje opis wyglądu xml i przekształca je w obiekty widoku oparte na Javie.
źródło
moja lista dostosowań ma nadzieję, że ilustruje koncepcję
źródło
LayoutInflater jest podstawowym składnikiem Androida. Musisz go cały czas używać do przekształcania plików XML w hierarchie widoków.
źródło
LayoutInflater tworzy obiekty View na podstawie układów zdefiniowanych w XML. Istnieje kilka różnych sposobów korzystania z LayoutInflater, w tym tworzenie niestandardowych widoków, nadmuchiwanie widoków fragmentów do widoków działań, tworzenie okien dialogowych lub po prostu nadmuchiwanie pliku układu widok do działania.
Istnieje wiele nieporozumień na temat tego, jak działa proces inflacji. Myślę, że wynika to z braku dokumentacji dla metody inflate (). Jeśli chcesz dowiedzieć się więcej o metodzie inflate (), napisałem o tym post na blogu:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
źródło
Inflater w rzeczywistości konwertuje dane, widoki, instancje, na widoczną reprezentację interfejsu użytkownika .. .. wykorzystuje programowo przesył danych do być może adapterów itp. następnie integrując go ze zdefiniowanym plikiem XML, który mówi, jak dane powinny być reprezentowane w interfejsie użytkownika
źródło