设置ListView项目高度

时间:2012-02-24 23:14:37

标签: android listview

这应该是一件非常容易的事情,但它看起来非常棘手。 在我的代码中,我有这个ListView:

<ListView android:id="@+id/sums_list" android:layout_width="fill_parent"
        android:layout_height="0dp" android:layout_weight="1" android:dividerHeight="0dp"></ListView>

使用此视图的ArrayAdapter填充:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:cdpb="http://schemas.android.com/apk/res/ale.android.brainfitness"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="55dp">
...
</LinearLayout>

为什么55dp项目不高?

谢谢大家

4 个答案:

答案 0 :(得分:66)

你是如何夸大观点的?

如果您将'parent'参数设置为null,如下所示,则忽略布局参数。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  ...
  View v = inflater.inflate(R.layout.filtered_trip_row, null);
  …

  return v;
}

将'parent'传递给inflate应该按预期工作。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  ...
  View v = inflater.inflate(R.layout.filtered_trip_row, parent);
  …

  return v;
}

这详细解释了:Why does LayoutInflater ignore the layout_width and layout_height layout parameters I've specified?

为避免获取UnsupportedOperationException,您可以将false作为输入参数添加到inflator。例如:

inflater.inflate(R.layout.filtered_trip_row, parent, false)

答案 1 :(得分:9)

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  ...
  View v = inflater.inflate(R.layout.filtered_trip_row, parent,false);
  …

  return v;
}

只需将boolean值传递给方法,以便将yourrowlayout添加到listview中 并且它不会给出错误,如错误java.lang.UnsupportedOperationException:AdapterView不支持addView(View,LayoutParams)

并添加您希望通过适配器填充的yourLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:cdpb="http://schemas.android.com/apk/res/ale.android.brainfitness"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="55dp">
...
</LinearLayout>

它适用于我,我认为它可以帮助你

答案 2 :(得分:0)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:minHeight="60dp"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="center"
    android:weightSum="1"
    android:background="@color/main_color">

    <ImageView
        android:id="@+id/img_left_menu"
        android:layout_weight="0.4"
        android:focusable="false"
        android:maxHeight="50dp"
        android:maxWidth="50dp"
        android:minHeight="50dp"
        android:minWidth="50dp"
        android:layout_width="0dp"
        android:scaleType="centerInside"
        android:adjustViewBounds="true"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/tx_left_menu"
        android:layout_width="0dp"
        android:textSize="18dp"
        android:layout_gravity="center_vertical"
        android:layout_weight="0.6"
        android:singleLine="true"
        android:layout_height="wrap_content"
        android:focusable="false"
        />
</LinearLayout>
适配器中的

设置如上所述的父级

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  ...
  View v = inflater.inflate(R.layout.filtered_trip_row, parent,false);
  …

  return v;
}

答案 3 :(得分:0)

convertView = inflater.inflate(R.layout.custom_row, parent, false);

if (CONDITION) {
    holder.wholeLayout.getLayoutParams().height = 1; // visibility Gone not working && 0 height crash app.
} else {
    holder.wholeLayout.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT;
}