Как передать значение ширины / высоты макета в пользовательский класс представления

Я создаю модуль, имеющий класс (roundbutton), расширяющий линейное расположение. Он содержит просмотр изображений и просмотр текста.

Когда представление округлой кнопки объявлено в файле XML, присваиваются значения layout_width и layout_height. Я хочу, чтобы размеры изображения были пропорциональны назначенным размерам макета. Следовательно, как передать размеры макета классу представления, чтобы я мог назначить пропорциональные размеры представлению изображения?

PS: этот вопрос не касается передачи пользовательских атрибутов. Но имеет дело с передачей android:layout_width а также android:layout_height в пользовательский класс пользовательского интерфейса.

1 ответ

Решение

Я решил это, передав экземпляр представления методу, который требует значения. А потом использовать getViewTreeObserver().OnGlobalLayoutListener(),

public void setIcon(final RoundedButton rb, final int drawableResourceId, final int position){
    mIconPosition = position;

    rb.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            buttonWidth = rb.getWidth();
            buttonHeight = rb.getHeight();

            //whatever needs to be done with the dimensions
        }
    });
}

Вы не можете сделать this.getViewTreeObserver().addOnGlobalLayoutListener() даже если класс расширяет тип представления.

Другие вопросы по тегам