Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Как можно узнать высоту Laoyut?

#android #android_layout


Я сам назначаю ему высоту по контенту, но я хочу узнать его высоту в dp или пикселях,
чтобы при смене контента оставить высоту таким же какой и был.

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fr.getLayoutParams();
params.height = -2;
fr.setLayoutParams(params);


И еще вопрос: если я назначу 

params.height = 100;


в чем это значение измеряется - в px или dp?
    


Ответы

Ответ 1



Приведённый вами в вопросе код спокойно вернёт в params.height высоту элемента. Проблема может возникнуть, если она изначально = "wrap_content" || "match_parent"; //вернёт -2 || -1, а не высоту в пикселях Тогда вариантов несколько. Например можно получить координаты "верха" и "низа" элемента: FrameLayout fr = //находим элемент int topYcoord = fr.getTop(); int bottomYcoord = fr.getBottom(); И из них вычислить высоту элемента: int calculatedHeight = bottomYcoord-topYcoord; И применить к элементу: FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fr.getLayoutParams(); params.height = calculatedHeight; fr.setLayoutParams(params); UPD 0: Всё вышеописанное работает в onResume() активити, когда система подсчитала все координаты всех лэйаутов. До onResume() можно, например так: //int h = fr.getMeasuredHeight(); вернёт 0, т.к. не измерялось ещё. //вроде как принудительно измеряет элемент //"0" здесь - это какие-то константы. Что и как они конкретно делают - магия для меня fr.measure(0,0); //теперь высота измерена и вернет !0 int h = fr.getMeasuredHeight(); UPD 1: Поэкспериментировал. Выводы: FrameLayout возвращает 0 всегда, если в нём нет детей. Если есть ребёнок, возвращает его высоту, даже если он (ребёнок) занимает его не полностью. С RelativeLayout всё работает. Вывод: Пользуйте RelativeLayout.

Комментариев нет:

Отправить комментарий