getMeasuredHeight() 是否以像素或 dp 为单位返回值

use*_*121 7 android listview view

我正在尝试以编程方式获取列表视图中项目的高度。所以我在我们的网站上提到了一些 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;
}
Run Code Online (Sandbox Code Playgroud)

从上面的代码返回的值,应该是以像素为单位,这意味着我必须将其转换为 dp 以便我的代码可以在不同的屏幕尺寸上正常工作。要将像素转换为 dp,我使用了以下 gcode:

private float px2dp(int pxVal) {
    float density = this.getResources().getDisplayMetrics().density;

    return (pxVal/ density);
}
Run Code Online (Sandbox Code Playgroud)

现在,由于我的列表包含 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
Run Code Online (Sandbox Code Playgroud)

我无法理解的是,当“calcListViewItemsHeight”方法返回“高度”时,我得到了 img_1 中所示的高度列表视图,但是如果“calcListViewItemsHeight”返回“dp”,我得到了 img_2 中所示的高度列表视图

'getMeasuredHeight()' 是否以 dp 或像素为单位返回值?

img_1 :

在此处输入图片说明

img_2 :

在此处输入图片说明

And*_*nko 7

文档称返回值是“该视图的原始测量高度”。从这里开始, “原始”意味着像素。也许这个链接也对您有帮助。