Android Dokumentacja mówi , że nie ma dwóch rozmiarach dla widzenia zmierzonych wymiarów i wymiarów rysunkowych . Mierzony wymiar to ten obliczony w trakcie pomiaru ( metoda onMeasure ), podczas gdy wymiary rysunku to rzeczywisty rozmiar na ekranie. W szczególności dokumentacja mówi, że:
Wartości te mogą, ale nie muszą, różnić się od zmierzonej szerokości i wysokości.
Tak więc moje pytanie brzmi: co może sprawić, że wymiar rysunku będzie różny od wymiaru mierzonego? Jeśli metoda onMeasure (int, int) spełnia wymagania dotyczące układu (podane jako parametry widthMeasureSpec i heightMeasureSpec , w jaki sposób zestaw SDK może zdecydować, że widok powinien mieć inny rozmiar rysunku?
Ponadto, w jaki sposób / gdzie w kodzie źródłowym Androida zmierzona szerokość / wysokość jest używana do obliczenia szerokości / wysokości rysunku? Próbowałem zajrzeć do kodu źródłowego View , ale nie mogę dowiedzieć się, w jaki sposób zmierzona szerokość / wysokość jest używana do obliczenia ostatecznej szerokości / wysokości. Może ma to coś wspólnego z wyściółką, ale nie jestem pewien.
źródło
Odpowiedzi:
Jak sama nazwa wskazuje, zmierzona szerokość / wysokość jest używana podczas fazy pomiaru i układania.
Podam przykład,
Widżet jest proszony o zmierzenie samego siebie. Widżet mówi, że chce mieć wymiary 200 na 200 pikseli. Jest to mierzone Szerokość / wysokość.
W fazie layoutu, czyli w metodzie onLayout. Metoda może korzystać z measurementWidth / height swoich elementów podrzędnych lub przypisywać nową szerokość / wysokość, wywołując metodę układu widoku.
powiedzmy, że metoda onLayout wywołuje childview.layout (0,0,150,150), teraz szerokość / wysokość widoku jest inna niż zmierzona szerokość / wysokość.
Sugerowałbym, aby nie używać mierzonej szerokości / wysokości poza metodą onLayout.
podsumowując.
dodatkowo
public void View.layout(int l, int t, int r, int b)
wydaje się być miejscem, w którym następuje przypisanie pozycji i rozmiaru.
źródło