2016-12-10 31 views
0

我想以編程方式獲取listview中項目的高度。所以我提到索姆epost在我們的網站,我想出了下面的代碼getMeasuredHeight()返回值的像素或dp

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 I所使用的跟隨着G代碼:

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

    return (pxVal/ density); 
} 

現在,我的列表中包含4個項目,我得到它代表了項目的數量以下的logcat輸出包含在ListView和高度在兩個像素和DP列表視圖,這reults來自 「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」回報「高度」我得到了高度的列表視圖作爲顯示在img_1中,但如果'calcListViewItemsHeight'返回'dp',我得到了一個listvi高度 如圖所示img_2

does'getMeasuredHeight()'是否返回dp或像素值?

img_1

enter image description here

IMG_2

enter image description here

回答

0

Documentation說,返回值是 「這一觀點的原始測量的高度」。並且從here「raw」意味着像素。並可能是this的鏈接也幫助你。

0

childView.getMeasuredHeight();將返回高度px

private float calcListViewItemsHeight(ListView listView){ 

在此函數中,您正在計算ListView的總高度。 和計算的height將在px.and你012.(px)轉換爲dp(在dp)。

我想知道,你在哪裏應用這些結果?

px中的值大於dp中的值。這就是爲什麼第一種情況下ListView大於第二種情況。

您必須給ListView高度px而不是dp .AFAIK,dp中的值僅適用於xml文件。

+0

感謝您提供的信息...請你看看這個問題以及http://stackoverflow.com/questions/41074602/regarding-understanding-the-layout-units – user2121

相關問題