android - 获取用作 ListView 自定义行的根 xml 布局的 LayoutParams

标签 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;

当父类型未知时,问题就来了。实现可自定义的 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/

相关文章:

android - 如何检测在android中按下按钮的时间

android - 如何使 ListView 可滚动直到最后一个元素位于屏幕顶部

java - 在 ListView android 的底部显示最新项目

android - libGDX 设计模式

android - 如果禁用 GPS,则强制关闭应用程序

javascript - 适用于 Android 的 React Native 日期和时间选择器不起作用

java - 保存 ListView 状态(行)?

java - 在测试应用程序或网站时,本地化和国际化测试是否重要?

android - Eclipse Android 布局设计器 - 添加用于预览的新屏幕尺寸

android - 如何在 Android 应用程序 UI 上获取带阴影的框?