Mam układ zdefiniowany w XML. Zawiera także:
<RelativeLayout
android:id="@+id/item"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Chciałbym napompować ten RelativeView innym plikiem pliku XML. Mogę używać różnych układów w zależności od sytuacji. Jak mam to zrobić? Próbowałem różnych odmian
RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)
Ale żaden z nich nie działał dobrze.
android
android-layout
layout-inflater
android-inflate
Michał Dymel
źródło
źródło
Nadmuchujesz zasób XML. Zobacz dokument LayoutInflater .
Jeśli twój układ znajduje się w pliku mylayout.xml , zrobiłbyś coś takiego:
źródło
Chociaż późna odpowiedź, ale chciałbym dodać ten jeden sposób na uzyskanie tego
gdzie
item
jest układ nadrzędny, do którego chcesz dodać układ podrzędny.źródło
R
zasobów jako odniesień do obiektu, są to po prostuint
s. Musisz użyćfindViewById
przekazując go doR
zasobu, a następnie wpisz rzutuj na wybrany obiekt. Następnie możesz użyć go w wywołaniach funkcji, takich jakinflate
. (tzn.ViewGroup item = (ViewGroup) findViewById(R.layout.activity_layout);
... możesz użyćitem
jak wyżej.)RelativeLayout
zamiast tegoViewGroup
w powyższym przykładzie, ponieważ nie można utworzyć instancji klasy podstawowejViewGroup
. Dopadła mnie zasada edycji 5 minut. lolPomocne jest dodanie do tego, nawet jeśli jest to stary post, że jeśli widok potomny, który jest zawyżany z xml, ma zostać dodany do układu grupy widokowej, musisz wywołać inflate ze wskazówką, jaki rodzaj grupy widokowej ma zamiar do dodania do. Lubić:
Metoda inflacji jest dość przeciążona i opisuje tę część użycia w dokumentach. Miałem problem polegający na tym, że pojedynczy widok zawyżony z xml nie wyrównywał się prawidłowo w obiekcie nadrzędnym, dopóki nie wprowadziłem tego typu zmian.
źródło
Jeszcze prostszym sposobem jest użycie
źródło
View.inflate()
jest najlepszy sposób, bez zbędnychLayoutInflater
lubgetSystemService(Context.LAYOUT_INFLATER_SERVICE)
lub którykolwiek z całej tej uciążliwości! : Dinflacja układu
źródło
Jeśli nie jesteś zajęty, możesz użyć
from()
metody statycznej zLayoutInflater
klasy, aby uzyskaćLayoutInflater
, lub zażądać usługi z metody kontekstowejgetSystemService()
:(Wiem, że to prawie 4 lata temu, ale nadal warto o tym wspomnieć)
źródło
Jeśli chcesz dodać jeden widok wiele razy, musisz użyć
Jeśli ci się podoba
i
wtedy wyrzuci wyjątek od wszystkich gotowych dodanych widoków.
źródło
AttachToRoot Ustaw na True
Pomyśl tylko, że podaliśmy przycisk w pliku układu XML z szerokością i wysokością układu ustawioną na match_parent.
Na tych przyciskach kliknij wydarzenie, które możemy ustawić zgodnie z kodem, aby nadmuchać układ w tej aktywności.
Mam nadzieję, że to rozwiązanie działa dla Ciebie.!
źródło
Wypróbuj ten kod:
źródło
Najtrudniej mi było z tym błędem z powodu moich wyjątkowych okoliczności, ale w końcu znalazłem rozwiązanie.
Moja sytuacja: używam osobnego widoku (XML), który zawiera a
WebView
, a następnie otwiera sięAlertDialog
po kliknięciu przycisku w głównym widoku aktywności. Ale jakoś czy inaczejWebView
należała do głównego widoku działalności (prawdopodobnie dlatego, że ciągnąć zasób stąd), a więc tuż przed I przypisany do mojegoAlertDialog
(w widoku), musiałem dostać rodzica z moichWebView
, włożyć doViewGroup
, następnie usuń wszystkie widoki na ten tematViewGroup
. To zadziałało, a mój błąd zniknął..... później po załadowaniu mojego
WebView
....źródło
Jeśli próbujesz dołączyć widok podrzędny do RelativeLayout? możesz to zrobić, wykonując następujące czynności
źródło
Dzięki Kotlin możesz używać:
źródło
Użyłem do tego fragmentu kodu i zadziałało to dla mnie.
źródło