包含ListView的线性布局中的Android Scrollview

时间:2017-01-04 19:31:17

标签: android android-layout listview scrollview

scrollview由于某种原因不起作用。我在scrollview中有一个线性布局,在LinearLayout中有一个listview。 我做错了什么?

下面是我的布局文件。

    <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用于防止滚动列表视图的类

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();
}
}

1 个答案:

答案 0 :(得分:1)

您可以使用listview标题。

为标题部分创建一个xml文件(包含要在listview上方显示的元素), let,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设置为listview标题,

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标题而不是scrollview中的listview

,性能要好得多