【问题标题】:How to implement a ListView completely inside a ScrollView如何在 ScrollView 中完全实现 ListView
【发布时间】:2015-02-24 05:51:03
【问题描述】:

在这里,我在ScrollView 中使用listView,一切正常,但是当我设置它的高度fill_parent 时,listView 没有完全显示。所以我已经固定了它的高度,当我更换安卓手机设备时它看起来并不好。任何人都可以帮助我吗? 我也在发布我的 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>

谢谢。

【问题讨论】:

  • 您不需要将ListView 放在ScrollView 中。 ListView 已经可以按原样滚动了。
  • 为什么要在scrollview中使用listview,listview已经可以滚动了
  • 我知道。但我必须在其中添加一些表格,所有数据都来自网络服务,所以我需要添加listView
  • 很抱歉,您的 GUI 设计很像网页设计。这不适用于普通的智能手机或小型平板电脑。您拥有的布局几乎无法管理。为了您或您的项目,您可以将布局分离到单独的文件中,更易于管理。

标签: android listview android-listview android-xml


【解决方案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后调用上述方法,Like:

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

【讨论】:

  • 使用这个答案没有任何改变。
【解决方案2】:

只需使用ListView的headerView:将所有你想要的东西放在headerView的list上面,把你想要的所有东西放在footerView下面。 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多