【问题标题】:Set ListView item height设置 ListView 项目高度
【发布时间】:2012-02-24 23:14:36
【问题描述】:

这应该是一件很容易的事情,但看起来很棘手。 在我的代码中,我有这个 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 不高?

谢谢大家

【问题讨论】:

  • 为什么是android:layout_height="0dp"
  • 实际发生了什么?您是否看到物品但高度不正确?你没有看到任何项目吗?您发布的内容没有任何明显错误,但查看您的适配器并了解您现在看到的内容会有所帮助。
  • @Secator 0dp 定义权重是应用于高度还是宽度。所以在这个例子中,权重 1 将应用于高度,因为它设置为 0dp。

标签: android listview


【解决方案1】:

你是如何夸大视图的?

如果您将 '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)

【讨论】:

  • 感谢 Amol,我无法理解 LayoutInflater,现在一切都清楚了。我可以让它工作,最重要的是,我明白为什么它会这样工作。非常感谢
  • 如果你得到不受支持的操作:看看这个:LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(mDisplayWidth / 3, 30); convertView.setLayoutParams(params);
  • @Amol Brid,我收到错误 java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
  • 为了避免@AlanLai的问题,在方法@​​987654329@中添加参数inflate
  • @Alan Lai 喜欢这样:View v = inflater.inflate(R.layout.filtered_trip_row, parent,false);
【解决方案2】:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
  ...
  View v = inflater.inflate(R.layout.filtered_trip_row, parent,false);
  …

  return v;
}

只需将布尔值传递给方法,以便将 yourrowlayout 添加到列表视图 并且它不会再给出错误,例如错误 java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView

并添加你想通过适配器填充的你的布局

<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>

它对我有用,我认为它可以帮助你

【讨论】:

    【解决方案3】:
    <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;
    }
    

    【讨论】:

      【解决方案4】:
      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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-16
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多