2015-10-29 4 views
0

На Android MAndroid M footerView.getMeasuredHeight() возвращает неправильно

footerView.getMeasuredHeight() 

возвращает 3373. Это происходит на всех устройствах я проверяемых, которые работают Android M. На Nexus 5 это не происходит на KitKat но делает это на версии M. Я работаю на реальных устройствах и никогда не на эмуляторе.

Измерение происходит после следующего кода:

LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View appListItemView = layoutInflater.inflate(R.layout.view_selectable_app, null); 
View headerView = layoutInflater.inflate(R.layout.app_feeds_container_header, null); 
View footerView = layoutInflater.inflate(R.layout.apps_feed_container_footer, null); 

appListItemView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
headerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
footerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

appListItemView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
headerView.measure(View.MeasureSpec.EXACTLY, View.MeasureSpec.UNSPECIFIED); 
footerView.measure(View.MeasureSpec.EXACTLY, View.MeasureSpec.UNSPECIFIED); 

Важно не то, что заголовок измеряется правильно.

ответ

1

Вы используете неправильные параметры для вызова measure(). Вот пример: https://stackoverflow.com/a/8403680/1395437

Мнение footerView, безусловно, неверно, потому что вы запрашиваете EXACTLY, но сколько именно?

Вместо этого оно должно быть что-то вроде:

int widthMeasureSpec = MeasureSpec.makeMeasureSpec(parent.getWidth(), MeasureSpec.EXACTLY); 
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); 
footerView.measure(widthMeasureSpec, heightMeasureSpec); 
Смежные вопросы