【发布时间】:2016-12-10 09:53:58
【问题描述】:
我正在尝试以编程方式获取列表视图中项目的高度。所以我在我们的网站上提到了一些 epost,我得出了以下代码
private float calcListViewItemsHeight(ListView listView) {
Log.d(TAG, getApplicationContext().getResources().getResourceEntryName(listView.getId()) + ".getCount() :" + listView.getCount());
int height = 0;
for (int i = 0; i < listView.getCount(); i++) {
View childView = listView.getAdapter().getView(i, null, listView);
childView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
height+= childView.getMeasuredHeight();
}
//dividers height
height += listView.getDividerHeight() * listView.getCount();
Log.d(TAG, getApplicationContext().getResources().getResourceEntryName(listView.getId()) + "totalHeight in px: " + height);
float dp = this.px2dp(height);
Log.d(TAG, getApplicationContext().getResources().getResourceEntryName(listView.getId()) + "totalHeight in dp: " + dp);
return dp;
//return height;
}
上述代码返回的值,应该是以像素为单位的,这意味着我必须将其转换为 dp,这样我的代码才能在不同的屏幕尺寸上正常工作。 要将像素转换为 dp,我使用了以下 gcode:
private float px2dp(int pxVal) {
float density = this.getResources().getDisplayMetrics().density;
return (pxVal/ density);
}
现在,由于我的列表包含 4 个项目,我得到以下 logCat 输出,它表示列表视图中包含的项目数以及列表视图的像素和 dp 高度,此结果来自 'calcListViewItemsHeight' 贴在上面
12-10 10:27:40.817 D/VersDetailActivity2: versicherungsListeActivity2mod_lisVie_versDetails.getCount() :4
12-10 10:27:40.822 D/VersDetailActivity2: versicherungsListeActivity2mod_lisVie_versDetailstotalHeight in px: 533
12-10 10:27:40.822 D/VersDetailActivity2: versicherungsListeActivity2mod_lisVie_versDetailstotalHeight in dp: 266.5
我无法理解的是,当方法“calcListViewItemsHeight”返回“height”时,我得到了一个高度的列表视图,如 img_1 所示,但如果“calcListViewItemsHeight”返回“dp”,我得到了一个高度的列表视图 如图img_2
'getMeasuredHeight()' 返回值是 dp 还是像素?
img_1:
img_2:
【问题讨论】: