Android 包含 ListView 的线性布局中的滚动视图

Android Scrollview in a Linear Layout that contains ListView

滚动视图不适用于某些 reason.I 在滚动视图内有一个线性布局而在 LinearLayout 内有一个列表视图。 我做错了什么?

下面是我的布局文件。

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@color/colorWhite"
    android:layout_height="wrap_content">

<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_movie_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:background="@color/colorWhite"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.netbigs.apps.moviesat.MovieDetail"
android:orientation="vertical">


<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imView"
    android:layout_gravity="center"

    android:layout_marginTop="8dp"
    android:layout_alignParentTop="true"
    android:layout_centerVertical="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tvmvname"
    android:paddingTop="10dp"
    android:textColor="@color/colorBg"
    android:textSize="16sp"
    android:textStyle="normal|bold"
    android:hint="Movie Name"
    android:layout_gravity="center"
    android:textAlignment="center"
    android:layout_centerVertical="true"

    android:layout_above="@+id/tvmvdate"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="18dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:layout_gravity="center"
    android:id="@+id/tvmvdate"
    android:textColor="@color/colorBg"
    android:hint="Release Date"
    android:layout_marginBottom="14dp"

    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tvmvinfo"
    android:layout_gravity="center"
    android:textColor="@color/colorBg"
    android:textAlignment="center"

    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" />

<com.freeapps.apps.mosoet.NonScrollListView
    android:id="@+id/theatrelist"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"


    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="5dp">


 </com.freeapps.apps.mosoet.NonScrollListView>


 </LinearLayout>

 </ScrollView>

NonScrollListView Class 防止列表视图滚动

public class NonScrollListView extends ListView {

public NonScrollListView(Context context) {
    super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int   defStyle) {
    super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
            Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
    ViewGroup.LayoutParams params = getLayoutParams();
    params.height = getMeasuredHeight();
}
}

您可以使用列表视图header。

为 header 部分创建一个 xml 文件(包含要在列表视图上方显示的元素), 让 xml 文件的名称是 header.xml

<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_movie_detail"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:background="@color/colorWhite"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.netbigs.apps.moviesat.MovieDetail"
    android:orientation="vertical">


<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imView"
    android:layout_gravity="center"
    android:layout_marginTop="8dp"
    android:layout_alignParentTop="true"
    android:layout_centerVertical="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tvmvname"
    android:paddingTop="10dp"
    android:textColor="@color/colorBg"
    android:textSize="16sp"
    android:textStyle="normal|bold"
    android:hint="Movie Name"
    android:layout_gravity="center"
    android:textAlignment="center"
    android:layout_centerVertical="true"
    android:layout_above="@+id/tvmvdate"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="18dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:layout_gravity="center"
    android:id="@+id/tvmvdate"
    android:textColor="@color/colorBg"
    android:hint="Release Date"
    android:layout_marginBottom="14dp"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tvmvinfo"
    android:layout_gravity="center"
    android:textColor="@color/colorBg"
    android:textAlignment="center"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" />
</LinearLayout>

在当前布局中只保留列表视图。

将 header.xml 设置为列表视图 header,

LayoutInflater myinflater = getLayoutInflater();
ViewGroup myHeader = (ViewGroup)myinflater.inflate(R.layout.headerlayout, myListView, false);

// you need to initialize your header xml elements using myHeader
// tvmvname = (TextView)myHeader.findViewById(R.id.tvmvname);
//and so on...
// you can set text and image here or later after initializing those
myListView.addHeaderView(myHeader, null, false);

***使用 listview header 比在 scrollview

中使用 listview 性能更好