Принудительное включение onLayout в подвиде, размеры которого не меняются
У меня есть обычай ViewGroup
с некоторыми взглядами внутри.
В ответ на событие вызывается requestLayout и в OnLayout
некоторые виды получат новую позицию макета.
Один из них сохраняет свою позицию, но его нужно переставить внутрь. Однако метод onlayout этого представления не будет вызываться, так как его расположение не изменяется. Пытаюсь позвонить requestLayout
, forceLayout
или же invalidate
в этом представлении не работает.
Единственный подвох, который я обнаружил, - это изменить некоторые его значения, чтобы вызвать изменение макета, но я думаю, что должен быть лучший способ. Итак, сейчас я делаю что-то (ужасное) вроде:
int patch = 0;
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) {
...
_myView.patchedLayout(patch);
_myview.layout(l1, t1 , r1, t1+patch);
patch = (patch+1) % 2;
...
}
Есть ли способ получить тот же результат лучше?
1 ответ
Я наконец получил решение: мне нужно переопределить onMeasure
и обязательно позвони mesure
по-моему:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
...
_myview.measure(widthMeasureSpec, heightMeasureSpec);
...
Он установит флаг LAYOUT_REQUIRED в закрытом поле представления mPrivateFlags, поэтому вызовет onLayout