如何为Dialog中放置的ListView设置固定大小,并动态添加元素

时间:2011-10-31 23:13:16

标签: java android xml listview size

我正在尝试在ListView内的Activity中加入Dialog。该对话框主要用于搜索蓝牙设备,因此我需要两个Button,一个TextView和一个ListView。这是我的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:padding="20dp">
    <TextView
        android:text="Bluetooth List"
        android:paddingTop="15dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">
    </TextView>
    <ListView android:id="@+id/bluetoothPanel_lvBluetooth"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_margin="10dip"
        android:drawSelectorOnTop="false">
    </ListView>
    <LinearLayout
        android:orientation="horizontal"
        android:paddingLeft="4.0dip"
        android:paddingTop="5.0dip"
        android:paddingRight="4.0dip"
        android:paddingBottom="1.0dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
            <Button
                android:id="@+id/bluetoothPanel_btnSearch"
                android:layout_width="0.0dip"
                android:layout_height="fill_parent"
                android:text="Search"
                android:layout_weight="1.0" />
            <Button
                android:id="@+id/bluetoothPanel_btnCancel"
                android:layout_width="0.0dip"
                android:layout_height="fill_parent"
                android:text="Cancel"
                android:layout_weight="1.0" />
    </LinearLayout>
</LinearLayout>

一开始,ArrayAdapter内的ListView为空,我动态添加元素。

问题是,我想为ListView设置固定大小,以便在动态添加元素时不会改变其大小(显示蓝牙设备列表)。你能帮我修一下我的XML吗?

修改

我不是在谈论数组大小。我在谈论listview本身(视图),列表视图的高度。

2 个答案:

答案 0 :(得分:0)

为列表设置自定义ListAdapter并覆盖getCount()方法,使其始终返回固定大小。

示例:http://jnastase.alner.net/archive/2010/12/19/custom-android-listadapter.aspx

答案 1 :(得分:0)

我想您正在询问如何为动态更改的ListView保留固定大小的空间。在类似的情况下,我将ListView包装在LinearLayout中,如下所示。请注意,这是ListView本身的xml,而不是单元格内容。此示例中的固定高度为100dip x 200dip。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/background_image"
    android:layout_width="100dip"
    android:layout_height="200dip">

    <ListView   android:id="@+id/list_view"
                android:layout_width="100dip"
                android:layout_height="match_parent"
                android:cacheColorHint="#00000000"
    />
</LinearLayout>

请注意,ListView的layout_width也设置为所需的固定宽度。我不知道为什么,但这似乎是必要的。

另请注意,背景图像或颜色是在LinearLayout上设置的,而不是在ListView上设置的。将ListView的cacheColorHint设置为透明使得ListView可以很好地播放。

如果你问别的东西(例如,修复可滚动高度而不管元素,这似乎是由@Stephen回答的),你可能想澄清这个问题。