Приведённый вами в вопросе код спокойно вернёт в
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.