1

我正在計算ListView中某些項目的高度,然後以編程方式將計算出的高度分配給ListView,以確保ListView將展開以適應其內容。我計算了ListView中項目的高度,如下面的代碼所示。關於理解佈局單元

如該代碼所示,下面的行返回等於533的值:

height += listView.getDividerHeight() * listView.getCount();// 

我的問題是,當ListView中的高度設定爲返回值「533」,如圖在代碼中,ListView與它的內容具有完全相同的高度。但是,當我把整個相同的值「533」到ListView :XML文件中的「Android layout_height」,然後ListView的擴展太大超出其內容

「比它的內容更高」所以我的問題是:

  1. 請解釋爲什麼發生這種情況?

  2. 至於發佈的代碼,當我將'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(); 

回答

0

1,請解釋爲什麼會是怎麼回事?

in .xml佈局文件,您正在使用dp中的值。與計算值533 533px。所以在佈局XML文件中使用

android:layout_height="533px" 

你會得到相同的結果。

+0

fine..but當我轉換的計算值 「522」 新聞部獲得266 ......當我編程方式設置claculated DP值,如圖代碼..我得到一個非常小的listview高度,即使我以編程方式在代碼中指定了正確的單位 – user2121

+0

以編程方式您必須在px.convert中將值賦給px.您將得到相同的結果。以上回答 –

+0

我覺得你的轉換是錯誤的。檢查最後的答案。它可以幫助! –

0

首先,你需要閱讀關於尺寸here。它說

將dp單位轉換爲屏幕像素很簡單:px = dp *(dpi/160)。例如,在240 dpi屏幕上,1 dp等於1.5個物理像素。定義應用程序的用戶界面時,應始終使用dp單位,以確保在不同密度的屏幕上正確顯示您的用戶界面。

1-請解釋爲什麼會發生這種情況?

那是因爲如何渲染這些像素。當你用XML來完成時,它是靜態地呈現,當你用Java做它時,它是動態呈現。

0

2 - 對於發佈的代碼,當我將'TypedValue.COMPLEX_UNIT_DIP'更改爲'TypedValue.COMPLEX_UNIT_PX'之類的任何其他單元時,根本沒有任何變化。爲什麼沒有改變佈局單元的效果參數

ans:返回值將在px中。

enter image description here

enter image description here

enter image description here