Android ListView条目高度

54
为什么我在使用SimpleCursorAdapter来创建ListView时,列表项的高度会像这样 - listview image?(我的代码基于这个
但是当我使用数组来创建ListView时,列表项的高度很大,为什么呢?listview big(我是根据这个学习ListView的)
列表项的行布局如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

我的问题是,为什么使用ArrayAdapter和SimpleCursorAdapter时行高存在差异?


尝试这个:https://dev59.com/SnA75IYBdhLWcg3wUHSQ#12513898 - Ashish Dwivedi
7个回答

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

似乎没有效果。

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

为我改变了高度


@Bamboo,如何在程序中设置这个? - Akshatha S R
将android:minHeight属性添加到TextView元素中,或者通过Java代码以编程方式设置它。 - Bamboo

37

对我来说诀窍不是设置高度,而是设置minHeight。这必须应用于自定义适配器在渲染每一行时使用的任何布局的根视图。


花了将近一个小时的时间寻找解决方案。这正是对我有用的方法。 - ejel

11

你需要在列表项布局中使用padding,这样空间就会在项目的边缘上添加(仅增加字体大小不会做到这一点)。

<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text1"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:padding="8dp" />

5
我做了这样的事情:
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View view = super.getView(position, convertView, parent);

    TextView textView = (TextView) view.findViewById(android.R.id.text1);
    textView.setHeight(30);
    textView.setMinimumHeight(30);

    /*YOUR CHOICE OF COLOR*/
    textView.setTextColor(Color.BLACK);

    return view;
}

如果您不同时设置textView.setHeight(30); 和 textView.setMinimumHeight(30);,它将不会改变任何内容。对我来说,这个方法起作用了,我曾经遇到过相同的问题。


1
列表视图项的高度根据其内容进行调整。在第一张图片中,没有内容,因此高度非常小。在第二张图片中,高度根据文本的大小增加。因为您指定了android:layout_height="wrap_content"。

0
这是我的解决方案; 这是我在BaseAdapter子类中的getView()方法:
public View getView(int position, View convertView, ViewGroup parent)
{
    if(convertView==null)
    {
        convertView=inflater.inflate(R.layout.list_view, parent,false);
        System.out.println("In");
    }
    convertView.setMinimumHeight(100);
    return convertView;
}

这里我已将ListItem的最小高度设置为100;


-1
这是我的解决方案(有一个嵌套的LinearLayout):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/item"
            android:layout_width="match_parent"
            android:layout_height="47dp"
            android:background="@drawable/box_arrow_top_bg"
            android:gravity="center"
            android:text="全部收支"
            android:textColor="#666"
            android:textSize="16sp" />
    </LinearLayout>

</LinearLayout>

不必要的嵌套是一种不良实践,也会影响性能。在这里嵌套LinearLayout并没有什么区别。 - afollestad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接