ListView覆盖Android的整个屏幕

时间:2012-06-15 04:28:35

标签: android android-listview

我在Android应用(API 8)中实现了一个列表视图。但是,该列表仅包含三个元素,因此,屏幕的一半以上是空的。我想扩展listview以覆盖手机的整个屏幕。有什么方法可以做同样的事情?

这是我的布局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>

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

3 个答案:

答案 0 :(得分:2)

ListView不会自动填充所有空间。如果你想实现这一点,因为在这里,ListView占用了整个空间,而不是它的项目。如果你仍然想要更大的行,如果是较小的项目,那么使用getCount()方法在getView方法中提供列表项的高度。

例如,您希望在列表中的屏幕上一次显示最多六个项目。然后像这样实现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

答案 1 :(得分:2)

我刚刚复制了你的XML,粘贴并尝试过,它运行正常。还有一件事要说明你不应该使用layout_height="wrap_content"。相反,您可以将android:layout_height="0dip"设置为已使用android:layout_weight="1",这将使ListView填充LinearLayout的剩余区域。

答案 2 :(得分: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"
/>