我想以編程方式獲取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:
IMG_2:
感謝您提供的信息...請你看看這個問題以及http://stackoverflow.com/questions/41074602/regarding-understanding-the-layout-units – user2121