2016-04-29 6 views
0

Ich habe bereits den Quellcode angeschaut. Ich habe die Dokumente gelesen. Aber ich verstehe immer noch nicht, wie diese beiden Werte sich vergleichen und kontrastieren. Auch ich war überrascht zu sehengetMeasuredHeight vs getMeasuredHeightAndState

public final int getMeasuredHeight() { 
    return mMeasuredHeight & MEASURED_SIZE_MASK; 
} 

Warum die bitweise UND?

Antwort

0

mMeasuredHeight ist ein ganzzahliger Wert, der zwei verschiedene Informationen über die Ansicht enthält.

Offensichtlich ist das erste Stück die Größe. Es gibt eine vernünftige maximale Höhe, die eine Ansicht haben kann, und sie ist viel kleiner als die maximale Ganzzahl. Sie können also die höchsten Bits im Integer-Wert verwenden, um Flags zu setzen.

In diesem Fall ist das Flag gesetzt MEASURED_STATE_TOO_SMALL, das ist das zweite Stück. Wenn Sie dieses Bit auf 1 setzen, wird in der Ansicht angezeigt, dass die gemessene Größe kleiner ist als der Platz, den die Ansicht haben möchte.

getMeasuredHeight führt ein bitweises AND aus, um dieses Bit mit jeder Funktion zu eliminieren, die den Raw-Pixelwert verwendet.