获取根xml布局的LayoutParams,该布局用作列表视图的自定义行

时间:2013-10-04 19:39:49

标签: android android-layout android-listview layoutparams xml-layout

要设置布局参数(宽度,高度和边距)或以编程方式将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>

这里面是在Adapter类的getView方法中返回的View。

如何将LayoutParams设置为ID为@+id/country ???

的布局

我真正关心的是将边距设置为该布局。

1 个答案:

答案 0 :(得分: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的边距。