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 性能更好
滚动视图不适用于某些 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 性能更好