您的位置:首页 > 移动开发 > Android开发

android 计算view 高度

2015-12-07 21:30 519 查看

android 计算view 高度

通过getHeight或者getMeasuredHeight函数获取

通过这几行代码去计算。

int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
view.measure(widthSpec, heightSpec);
height = view.getMeasuredHeight();


但是很多时候,上面这几个方面会有不起效果的时候,特别是试图在actvity 的 oncreate事件中获取view的高度,或者在fragment的oncreateview中获取view的高度。这些情况因为view还没有绘制完成,大小位置都还没确定,这时候获取到的高度一般都为0。这里我给出我的解决方案。就是通过view post一个线程。当view绘制完成,确定高度大小的时候就会调用这个线程,然后在这线程里面获取view的高度,一般就都可以获取到正确的高度了。

view.post(new Runnable() {
@Override
public void run() {view.getHeight()
}
});


还有一个就是计算listview的高度,这里的计算需要把listview的全部item高度相加得到

public static int getTotalHeightofListView(ListView listView) {
ListAdapter mAdapter = listView.getAdapter();
if (mAdapter == null) {
return 0;
}
int totalHeight = 0;
for (int i = 0; i < mAdapter.getCount(); i++) {
View mView = mAdapter.getView(i, null, listView);
mView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
totalHeight += mView.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (mAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
return params.height;
}


不过如果listview item里面包含过多的textview的时候计算出来的高度会有误差,如果想知道怎么解决,请看下回解答吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: