getMeasuredHeight() 是不是以像素或 dp 为单位返回值
Posted
技术标签:
【中文标题】getMeasuredHeight() 是不是以像素或 dp 为单位返回值【英文标题】:does getMeasuredHeight() return values in pixels or dpgetMeasuredHeight() 是否以像素或 dp 为单位返回值 【发布时间】: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:
【问题讨论】:
【参考方案1】:Documentation 表示返回值为“此视图的原始测量高度”。从here 开始,“原始”表示像素。并且可能是this链接也对你有帮助。
【讨论】:
【参考方案2】:childView.getMeasuredHeight();
将返回px
中的高度。
private float calcListViewItemsHeight(ListView listView)
在此函数中,您正在计算ListView
的总高度。
并且计算出的height
将以 px 为单位。您正在将height
(以 px 为单位)转换为 dp
(以 dp 为单位)。
我想知道,您在哪里应用这些结果?
px
中的值大于dp
中的值。这就是为什么在第一种情况下ListView
大于第二种情况。
您必须在px
中给出ListView
的高度,而不是在dp
.AFAIK,dp
中的值仅适用于 xml 文件。
【讨论】:
感谢您提供的信息...请您也看看这个问题***.com/questions/41074602/…以上是关于getMeasuredHeight() 是不是以像素或 dp 为单位返回值的主要内容,如果未能解决你的问题,请参考以下文章
getMeasuredHeight 和 getHeight 有啥区别
getMeasuredHeight() 与 getHeight() 的区别
getMeasuredHeight和getHeight有什么区别
getMeasuredHeight()与getHeight的区别