我正在計算ListView中某些項目的高度,然後以編程方式將計算出的高度分配給ListView,以確保ListView將展開以適應其內容。我計算了ListView中項目的高度,如下面的代碼所示。關於理解佈局單元
如該代碼所示,下面的行返回等於533的值:
height += listView.getDividerHeight() * listView.getCount();//
我的問題是,當ListView中的高度設定爲返回值「533」,如圖在代碼中,ListView與它的內容具有完全相同的高度。但是,當我把整個相同的值「533」到ListView :XML文件中的「Android layout_height」,然後ListView的擴展太大超出其內容
「比它的內容更高」所以我的問題是:
請解釋爲什麼發生這種情況?
至於發佈的代碼,當我將'TypedValue.COMPLEX_UNIT_DIP'更改爲'TypedValue.COMPLEX_UNIT_PX'之類的任何其他單元時,根本沒有任何變化。爲什麼在更改LayoutParameter的單位時沒有效果?
代碼:
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();// returns 533
param = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, height, this.getResources().getDisplayMetrics()));
param.addRule(RelativeLayout.BELOW, ruleSubject);
container.setLayoutParams(param);
listView.requestLayout();
fine..but當我轉換的計算值 「522」 新聞部獲得266 ......當我編程方式設置claculated DP值,如圖代碼..我得到一個非常小的listview高度,即使我以編程方式在代碼中指定了正確的單位 – user2121
以編程方式您必須在px.convert中將值賦給px.您將得到相同的結果。以上回答 –
我覺得你的轉換是錯誤的。檢查最後的答案。它可以幫助! –