0

我在我的 Android 应用程序(API 8)中实现了一个列表视图。但是,该列表仅包含三个元素,因此屏幕的一半以上是空的。我想扩展列表视图以覆盖手机的整个屏幕。有哪些方法可以做到这一点?

这是我的布局 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" 
android:background="@color/white"
android:shape="rectangle"
android:paddingTop="5dp"
android:paddingBottom="0dp"
>


<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:weightSum="100"
    >

    <ImageView
        android:layout_weight="40"
        android:id="@+id/test_image"
        android:layout_width="158dp"
        android:layout_height="52dp"
        android:contentDescription="@string/footer"
        android:src="@drawable/logo1" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="127dp"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_weight="60" 
        android:prompt="@string/city_prompt"
        />
</LinearLayout>

  <LinearLayout android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"   
    >
    <ListView 
    android:id="@android:id/list"
    android:layout_weight="1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#000000"
    android:drawSelectorOnTop="true"
    android:layout_gravity="center"
    android:dividerHeight="2dp"
    />


</LinearLayout>


</LinearLayout>

请注意,我希望列表项覆盖整个屏幕,只有三个项目到位。

4

3 回答 3

2

ListView 不会自动填充所有空间。如果你想实现这一点,因为在这里,ListView 占用了全部空间,而不是它的项目。如果您仍想制作更大的行,以防项目较少,则在 getView 方法中使用 getCount() 方法提供列表项的高度。

例如,您希望在列表中的屏幕上一次最多显示六个项目。然后像这样实现 ListView:

获取屏幕的宽度和高度,在 onCreate 方法中使用以下代码:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

现在在 getView 中,执行以下操作:

int itemHeight = 0;
if (getCount() >= 6)
    itemHeight = height/6;
else
    itemHeight = height/getCount();

LinearLayout llView=new LinearLayout(YourActivityName.this);
//Or inflate through XML

llView.setLayoutParams(new LayoutParams(LayoutParams.Fill_Parent, itemHeight));
//Do other functionality
于 2012-06-15T04:37:53.760 回答
2

我刚刚复制了您的 XML,粘贴并尝试了,它工作正常。还有一件事要告诉你,你不应该使用layout_height="wrap_content". 相反,您可以android:layout_height="0dip"按照您已经使用过的方式提供它,android:layout_weight="1"这将使 ListView 填充您的 LinearLayout 的剩余区域。

于 2012-06-15T04:41:19.377 回答
1

第一个变化:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@color/white"
    android:shape="rectangle"
    android:paddingTop="5dp"
    android:paddingBottom="0dp"
>

然后第二个,改变:

<ListView 
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000000"
    android:drawSelectorOnTop="true"
    android:layout_gravity="center"
    android:dividerHeight="2dp"
/>
于 2012-06-15T04:35:20.150 回答