1

要以編程方式設置佈局參數(寬度,高度和邊距)或將LayoutParams自設置爲特定佈局,父母必須知道。獲取用作列表視圖的自定義行的根xml佈局的LayoutParams

實施例1

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
someLayout.setLayoutParams(lp); 

這裏,someLayout類型不是真正需要是已知的。 LinearLayout.LayoutParams意味着someLayout的父級是LinearLayout。

實施例2

LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)someLayout.getLayoutParams(); 
lp.width = LayoutParams.MATCH_PARENT; 
lp.height = LinearLayout.LayoutParams.MATCH_PARENT; 

來的問題,當父類型是未知的。實現一個可定製的列表視圖行佈局將導致一個未知的父行的情況。擁有列表項目的父級。

實例佈局列表視圖項

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/country" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:gravity="center_horizontal|top"> 
     . 
     . 

</LinearLayout> 

這裏面去查看返回在適配器類的getView方法。

如何將LayoutParams設置爲ID爲@+id/country的佈局???

我真正關心的是將邊距設置爲該佈局。

回答

1

如果您不知道或無法確定父級的類別,則可以使用通用ViewGroup.LayoutParams。不過,就你的情況而言,父類是ListView本身,所以如果你需要更具體的東西,你可以使用AbsListView.LayoutParams

現在,問題是在任何情況下ListView不支持邊距。如果您想在項目之間添加一些空間,則可以使用每行的填充來玩弄。如果這不適合你,你也可以用你需要的高度在ListView中添加一個透明的除數,也可以給ListView一個水平的邊距。類似這樣的:

<ListView 
    ... 
    android:divider="@android:color/transparent" 
    android:dividerHeight="10dp" 
    android:marginLeft="5dp" 
    android:marginRight="5dp" /> 

會在每個列表單元格周圍添加5dp的邊距。

+0

ViewGroup.LayoutParams沒有邊距屬性 – hasan83

+0

AbsListView.LayoutParams too – hasan83

+0

哦,對不起。我跳過了最後一行。我已經更新了我的答案。 – ivagarz