如何在ScrollView中完全实现ListView

时间:2015-02-24 05:51:03

标签: android listview android-listview android-xml

在这里,我在listView内使用了ScrollView,一切正常,但{I}设置其高度listViewfill_parent并未完全显示。所以我修改了它的高度,当我改变Android手机设备时看起来并不好看。任何人都可以帮助我吗?  我也发布了 xml 类。

Demo.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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" >
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="25dp"
        android:gravity="center"
        android:orientation="vertical" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:paddingLeft="6dp"
            android:text="@string/course_tracker"
            android:textStyle="bold" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_finishapp_table"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:orientation="vertical" >

        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:background="#E3E3E3" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffffff"
            android:orientation="horizontal"
            android:weightSum="20" >

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />

            <LinearLayout
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="5"
                android:orientation="vertical" >

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center_horizontal|center_vertical"
                    android:text="@string/program_name" />
            </LinearLayout>

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />

            <LinearLayout
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:gravity="center"
                android:orientation="vertical"
                android:background="#e9e9e9" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="@string/colon"
                    android:textStyle="bold" />
            </LinearLayout>

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />

            <LinearLayout
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="13"
                android:gravity="center_vertical"
                android:orientation="vertical" >

                <TextView
                    android:id="@id/tv_program_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="10dp"
                    android:textStyle="bold" />
            </LinearLayout>

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />
        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:background="#E3E3E3" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#F9F9F9"
            android:orientation="horizontal"
            android:weightSum="20" >

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />

            <LinearLayout
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="5"
                android:orientation="vertical" >

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center_horizontal|center_vertical"
                    android:text="@string/program_description" />
            </LinearLayout>

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />

            <LinearLayout
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:gravity="center"
                android:orientation="vertical"
                android:background="#e9e9e9" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="@string/colon"
                    android:textStyle="bold" />
            </LinearLayout>

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />

            <LinearLayout
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="13"
                android:gravity="center_vertical"
                android:orientation="vertical" >

                <TextView
                    android:id="@id/tv_program_description"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="10dp"
                    android:textStyle="bold" />
            </LinearLayout>

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />
        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:background="#E3E3E3" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="20dp"
        android:orientation="vertical" >

        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:background="#E3E3E3" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:background="#ffffff"
            android:orientation="horizontal"
            android:weightSum="20" >

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />

            <LinearLayout
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="10"
                android:orientation="vertical" >

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center_horizontal|center_vertical"
                    android:text="@string/course_name" />
            </LinearLayout>

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />

            <LinearLayout
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="10"
                android:orientation="vertical" >

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center_horizontal|center_vertical"
                    android:text="@string/semester" />
            </LinearLayout>

            <TextView
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E3E3E3"
                android:text="" />
        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:background="#E3E3E3" />

        <ListView
            android:id="@id/list_course"
            android:layout_width="match_parent"
            android:layout_height="350dp"
            android:layout_marginBottom="10dp" >
        </ListView>
    </LinearLayout>

 </LinearLayout></ScrollView>

感谢。

2 个答案:

答案 0 :(得分:1)

根据列表计数动态设置ListView的高度,如:

private void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }

    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        if (listItem != null) {
            listItem.measure(
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        }

        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}
将适配器设置为ListView后,

调用上面的方法,如:

urListView.setAdapter(urAdapter);
setListViewHeightBasedOnChildren(urListView);

答案 1 :(得分:0)

只需使用ListView的headerView:将您想要的所有内容放在headerView中以及下面想要的所有内容中。 listView将以完整高度显示,headerView可以滚动。

http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View,%20java.lang.Object,%20boolean)

http://developer.android.com/reference/android/widget/ListView.html#addFooterView(android.view.View,%20java.lang.Object,%20boolean)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment, container, false);

    mListViewHeaderView = initHeaderView(mListView, inflater);

    mListView = (ListView) view.findViewById(R.id.listView);
    mListView.addHeaderView(mListViewHeaderView, null, false);

    return view;
}


private View initHeaderView(ViewGroup container, LayoutInflater inflater) {
    View headerView = inflater.inflate(R.layout.fragment_atm_details_header, container, false);

    // configure header view

    return headerView;
}