要设置布局参数(宽度、高度和边距)或以编程方式将 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;
当父类型未知时,问题就来了。实现可自定义的 ListView 行布局将导致行父项未知的情况。持有列表项的 parent 。
ListView 项目的示例布局
<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
的布局???
我真正关心的是为该布局设置边距。
最佳答案
如果您不知道或不能确定父类,您可以使用通用的 ViewGroup.LayoutParams
。不过,在您的情况下,父项是 ListView 本身,因此如果您需要更具体的内容,可以使用 AbsListView.LayoutParams
。
现在,问题是无论如何 ListView 都不支持边距。如果你想在项目之间添加一些空间,你可以尝试每一行的填充。如果这对您不起作用,您还可以向 ListView 添加一个具有所需高度的透明除数,并且可能向 ListView 添加一个水平边距。像这样:
<ListView
...
android:divider="@android:color/transparent"
android:dividerHeight="10dp"
android:marginLeft="5dp"
android:marginRight="5dp" />
会在每个列表单元格周围添加 5dp 边距。
关于android - 获取用作 ListView 自定义行的根 xml 布局的 LayoutParams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189458/