У меня была похожая проблема с настраиваемым представлением (в моем случае напрямую унаследованным от android.view.View
) и RelativeLayout
.
Я не переписывал метод onMeasure()
и использовал холст, полученный в onDraw()
, для записи в него своей графики. Графический вывод был полностью в порядке, но выравнивание других представлений в RelativeLayout
не работало, как в случае, описанном здесь.
Наконец-то выяснилось, что мой конструктор неправильно вызвал конструктор суперкласса (я забыл передать AttributeSet
). После того, как я изменил первую строку моего конструктора на
public MyNewView (Context context, AttributeSet attrs) {
super(context, attrs);
...
}
вдруг все заработало.
Похоже, что какое-то волшебство алгоритма разметки Android уже происходит в конструкторе android.View.view
задолго до вызова onMeasure()
.