【问题标题】:How can I make my listview rows different heights如何使我的列表视图行不同的高度
【发布时间】:2013-08-14 15:32:06
【问题描述】:

现在如果列表项的高度是 2 行,那么所有行的高度都是 2 行

如何使行的高度独立于其他行。

列表视图

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/user_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@null" />

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingBottom="1dp"
    android:paddingTop="1dp"
    android:paddingLeft="8dp"
    android:paddingRight="8dp" >

    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:maxLines="2"
        android:ellipsize="middle"
        android:textColor="@android:color/holo_blue_dark"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/points"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_weight="1"
        android:gravity="right"
        android:textStyle="bold" />

</LinearLayout>

我正在使用扩展 BaseAdapter 的自定义适配器。 getView 没有什么特别的,只是一个viewholder模式我不改变高度或任何东西

【问题讨论】:

  • 你能发布一些你想要实现的图像吗?
  • @sriramramani Ahmed Ekri 的回答有一个我想要达到的高度包装的图像
  • @codefish578841441 如果您想创建每个行高相互独立的列表视图,那么您需要创建自己的列表视图(即在滚动视图中放置膨胀视图并处理点击事件每个原始的..)..通过这样做,您可以创建任意高度的原始数据,具体取决于您的文本行数。
  • @codefish578841441:请发布您的自定义适配器代码

标签: java android listview


【解决方案1】:

你为什么不尝试让高度 = 0dp 和重量 1

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingBottom="1dp"
    android:paddingTop="1dp"
    android:paddingLeft="8dp"
    android:paddingRight="8dp" >

    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:maxLines="2"
        android:ellipsize="middle"
        android:textColor="@android:color/holo_blue_dark"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/points"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_gravity="right"
        android:layout_weight="1"
        android:gravity="right"
        android:textStyle="bold" />

</LinearLayout>

更新:

检查这个答案

https://stackoverflow.com/a/7513423/1932105

【讨论】:

  • 这使得行不可见
  • 感谢您的更新。高度已经设置为 wrap_contents 但它不起作用
  • 尝试删除 android:layout_weight="0"
  • 不,这也不起作用,它们不可见但仍然可以点击。我什至收到一个 lint 错误,说它们将不可见
  • 尝试将 LinearLayout 的方向设置为垂直,应该有助于解决隐形问题。 :)
【解决方案2】:

您将 TextView 限制为最多 2 行。它永远不会增长得更多。删除android:maxLines="2"。它应该会自动运行。

【讨论】:

    【解决方案3】:

    对我来说,诀窍不是设置高度,而是设置 最小高度。这必须应用于任何布局的根视图 您的自定义适配器用于呈现每一行。

    来源:https://stackoverflow.com/a/7368439/2498729

    android:textAppearance="?android:attr/textAppearanceLarge" 
    

    似乎没有效果。

    android:minHeight="?android:attr/listPreferredItemHeight" 
    

    为我改变了高度

    来源:https://stackoverflow.com/a/4274505/2498729

    【讨论】:

      【解决方案4】:

      看起来您必须在文本视图为空时将其可见性设为View.GONE。你可以在适配器实现中做到这一点。

      pointsView.setText(pointsText);
      pointsView.setVisibility(TextUtils.isEmpty(pointsText) ? View.GONE : View.VISIBLE);
      

      但要小心,因为您的视图位于 RelativeLayout 中,并且当锚定视图可见 View.GONE 时,其规则可能会停止工作。

      在这种情况下,您可以尝试将文本大小设置为零而不是更改视图可见性,但我自己没有尝试过。

      pointsView.setTextSize(TextUtils.isEmpty(pointsText) ? 0 : defaultSize);
      

      【讨论】:

        【解决方案5】:

        如果您不受 TextView MaxLine 的限制,请删除 android:maxLines="2" 这将自动调整列表的高度。
        如果您正在寻找独立于其他行增加某一特定行的高度。为列表设置适配器值后。获取列表
        final ListView lv = getListView(); 然后形成 lv 通过
        lv.getItemIdAtPosition(position) 或任何最适合您的代码的类似逻辑获取特定行。并在您查找时以编程方式更改行外观。谢谢。

        【讨论】:

          猜你喜欢
          • 2014-09-24
          • 1970-01-01
          • 2019-12-26
          • 1970-01-01
          • 2020-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多