Android M footerView.getMeasuredHeight() returns 错误
Android M footerView.getMeasuredHeight() returns incorrectly
上 Android 中
footerView.getMeasuredHeight()
returns 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);
重要的是不要 header 测量正确。
您为 measure()
调用使用了错误的参数。
这是一个示例:
footerView 尺寸肯定不正确,因为你要求 EXACTLY
,但具体是多少?
相反,它应该是这样的:
int widthMeasureSpec = MeasureSpec.makeMeasureSpec(parent.getWidth(), MeasureSpec.EXACTLY);
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
footerView.measure(widthMeasureSpec, heightMeasureSpec);
上 Android 中
footerView.getMeasuredHeight()
returns 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);
重要的是不要 header 测量正确。
您为 measure()
调用使用了错误的参数。
这是一个示例:
footerView 尺寸肯定不正确,因为你要求 EXACTLY
,但具体是多少?
相反,它应该是这样的:
int widthMeasureSpec = MeasureSpec.makeMeasureSpec(parent.getWidth(), MeasureSpec.EXACTLY);
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
footerView.measure(widthMeasureSpec, heightMeasureSpec);