如何使listview行的高度不同

时间:2013-08-14 15:32:07

标签: java android listview

现在,如果列表项目的高度为2行,则所有行的高度为两行

如何使行的高度与其他行无关。

的ListView

<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 patern我没有改变高度或任何东西

5 个答案:

答案 0 :(得分:10)

为什么不尝试制作高度= 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

enter image description here

答案 1 :(得分:3)

您将TextView限制为最多包含2行。它永远不会超过这个。删除android:maxLines="2"。它应该自动运行。

答案 2 :(得分:3)

  

对我而言,诀窍并不是设定高度 - 而是设定了   了minHeight。这必须应用于任何布局的根视图   您的自定义适配器用于渲染每一行。

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

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

似乎没有效果。

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

改变了我的身高

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

答案 3 :(得分:2)

您似乎必须在文字视图为空时将其视为View.GONE。您可以在适配器实现中执行此操作。

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

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

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

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

答案 4 :(得分:1)

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