安卓:如何让ListView的行具有可变高度?

4
我有一个ListView,我希望它的高度是固定的(比如150dp)。然后,在ListView内部,对于单独的行,文本可能长度不同,所以我希望行的高度也是不同的。
目前为止,我只能让所有行具有相同的高度,因此长文本被截断了。
有没有办法解决这个问题?

你能展示一些ListAdapter的代码吗? - Kevin Qiu
3个回答

2

终于成功了。

我使用以下适配器代码:

ArrayAdapter<String> mcqAnsAdapter = new
       ArrayAdapter<String>(this, R.layout.mylist, mcqOptions);

我已经创建了一个新的布局 mylist.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@android:id/text1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:textAppearance="?android:attr/textAppearanceLarge"
  android:gravity="center_vertical"
  android:checkMark="?android:attr/listChoiceIndicatorSingle"
  android:paddingLeft="6dip"
  android:paddingRight="6dip"
/>

以上类似于Android定义的“simple_list_item_single_choice.xml”,只是我将高度更改为“wrap_content”。

奇怪的是,第一次尝试时它没有起作用。然后,我做了一些修改,再回到这个版本,它就可以工作了。不知道发生了什么。但无论如何,很高兴看到它能够工作。

感谢所有试图提供帮助的人们。非常感激。

现在,另一个问题——我能把复选标记放在文本左边而不是默认的右边吗?


回答了自己的问题,关于如何将复选框放在左边。只需在mylist.xml中用以下代码替换checkMark行即可-- android:drawableLeft="?android:attr/listChoiceIndicatorSingle" -- 它非常好用。 :-) - alan

0
convertedview.setlayoutparams(new listview.setlayoutparams(width, height));

试试这样做。它会起作用的。


0

尝试过但不起作用。我正在使用这段代码来创建数组适配器-- ArrayAdapter<String> mcqAnsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, mcqOptions); 我认为问题可能出在simple_list_item_single_choice上,它有一个预定义的高度"?android:attr/listPreferredItemHeight"。所以我想为自己创建一个自定义的布局,但是遇到了问题。有什么想法吗? - alan

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