Ich habe einige Widgets mit addView und manchmal addViewInLayout gesehen.
Was ist der Unterschied zwischen ihnen? Was passiert, wenn ich das eine durch das andere ersetze?
Soll ich beim Layout ein Flag behalten und "addViewInLayout" oder "addView" entsprechend verwenden?
Danke.
BR, Henry
ps. Weitere Tags hinzufügen: removeview, removeviewinlayout
Es ist normalerweise eine schlechte Idee, addView
in onLayout
aufzurufen, weil addView
intern eine requestLayout
auslöst, die schließlich onLayout
aufruft. Sie landen also ein Layout aus, während Sie sich in der Mitte eines Layouts befinden.
addViewInLayout
ist eine "sicherere" Version von addView
für den Fall, dass Sie wirklich eine neue Ansicht in onLayout
hinzufügen müssen. Es löst grundsätzlich keinen Layout-Durchlauf aus (intern ruft requestLayout nicht auf).
Sehen Sie dieses Video (von Android-Ingenieur) für weitere Details: Ссылка
addViewInLayout
Fügt während des Layouts eine Ansicht hinzu. Dies ist nützlich, wenn Sie in Ihrer onLayout () -Methode weitere Ansichten hinzufügen müssen (z. B. die Listenansicht). Wenn der Index negativ ist, bedeutet dies, dass er am Ende der Liste steht.
addView
Weisen Sie die übergebenen LayoutParams der übergebenen Ansicht zu und fügen Sie die Ansicht dem Fenster hinzu.
* Beachten Sie, dass addView von ViewManager
implementiert wird, einer Schnittstelle, mit der Sie untergeordnete Ansichten zu einer Aktivität hinzufügen und daraus entfernen können. So können Sie ViewGroup zur Laufzeit Ansichten hinzufügen (DYNAMISCH). Beachten Sie außerdem, dass addViewInLayout eine geschützte Methode von ViewGroup ist. Wenn Sie also eine benutzerdefinierte Ansichtsgruppe erstellen, können Sie addViewInLayout()
in onLayout()
method aufrufen.
zum Beispiel: Wir haben ein Layout (mLayout) und Sie möchten 2 Ansichten (view1, view2) in dieses Layout einfügen. Also gibt es 2 Möglichkeiten (das gleiche)
Fall1: Sie verwenden einfach folgenden Befehl
%Vor%In diesem Fall ist die Funktion onLayout () nicht wichtig. es ist einfacher Quellcode.
Fall2: Kompliziert, aber bessere Leistung
%Vor%Ich habe keine Zeit, es zu testen. Jeder kann mir helfen, es klarer zu machen.