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

时间:2016-12-10 09:53:59

标签: android listview view

我试图以编程方式获取listview中项目的高度。所以我在我们的网站上提到了som 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'时,我获得了高度的listview,如img_1所示,但如果'calcListViewItemsHeight'返回'dp',我得到了一个高度列表视图 如img_2所示

'getMeasuredHeight()'以dp还是像素返回值?

img_1

enter image description here

IMG_2

enter image description here

2 个答案:

答案 0 :(得分:0)

Documentation表示返回值为“此视图的原始测量高度”。从here“raw”表示像素。可能this链接也可以帮助您。

答案 1 :(得分:0)

childView.getMeasuredHeight();将返回px中的高度。

private float calcListViewItemsHeight(ListView listView){

在此功能中,您正在计算ListView的总高度。 计算出的height将以px为单位。您正在将height(以px为单位)转换为dp(在dp中)。

我想知道你在哪里应用这些结果?

px中的值大于dp中的值。这就是为什么在第一种情况下ListView大于第二种情况。

您必须在ListView而不是px中提供dp高度.AFAIK,dp中的值仅适用于xml文件。