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的区别

Android getMeasuredHeight 返回错误值!

获取 JSON 的 str 表示以像 print() 一样进行编码