Warum wird onMeasure () in meiner benutzerdefinierten Ansicht zweimal aufgerufen?

8

Unten ist mein Code für meine benutzerdefinierte View :

XML-Layout:

%Vor%

Code in meinem CustomView.java :

%Vor%

Code der Testaktivität:

%Vor%

logcat Ausgabe:

%Vor%

Ich habe StackOverflow durchsucht, aber niemand gibt eine klare Antwort. Könnte mir jemand helfen?

    
linguowu 17.01.2014, 06:04
quelle

3 Antworten

9

Eine übergeordnete Ansicht kann measure () mehr als einmal auf ihren untergeordneten Elementen aufrufen. Zum Beispiel kann der Elternteil jedes Kind einmal mit nicht spezifizierten Dimensionen messen, um herauszufinden, wie groß sie sein wollen, und dann measure () erneut mit tatsächlichen Zahlen aufrufen, wenn die Summe aller unbeschränkten Kindergrößen zu groß oder zu klein ist ( Das heißt, wenn die Kinder untereinander nicht übereinstimmen, wie viel Platz sie bekommen, werden die Eltern eingreifen und die Regeln für den zweiten Durchgang festlegen. wie Ссылка sagt.

    
fredzzt 08.10.2015 07:31
quelle
0

In der Vergangenheit, als ich ähnliche Probleme hatte und es war, weil mein "onAnAction" -Code im Klassencode AKA der Aktivität in der onCreate für die Aktivität statt in der Klasse der benutzerdefinierten Ansichten gewesen sein sollte.

Das könnte funktionieren, aber es gibt keine Garantien. Es erfordert normalerweise ein wenig Geduld und Verständnis für den androiden Lebenszyklus.

    
Derek 17.01.2014 06:10
quelle
0

Vermissen Sie etwas in Ihrer Frage? Wenn Sie onMeasure überschreiben, müssen Sie setMeasuredDimension (int, int) aufrufen, sonst erhalten Sie eine IllegalStateException. In Ihrer Frage scheinen Sie keine Ausnahmen zu bekommen.

    
user3665376 12.12.2017 13:11
quelle