无法在 ScrollView 中滚动 LinearLayout
Unable to scroll LinearLayout in ScrollView
我想制作一个显示多个项目的布局,但我无法让它们完全展开,所以我使用了 ScrollView。但是,我发现我只能滚动第一个 GridView,最后两个项目不能向上滚动。
我需要的是两个GridView全显示,所有item都可以滚动,但是不知道怎么处理。
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ifchan.reader.AllClassActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/all_class_tool_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorToolbar"
app:title="All Class"
app:titleTextColor="#ffffff"/>
<ScrollView
android:id="@+id/all_class_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/all_class_tool_bar"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/all_class_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="male"
android:textSize="20dp"/>
<GridView
android:id="@+id/all_class_male_grid_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"/>
<TextView
android:id="@+id/all_class_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="female"
android:textSize="20dp"/>
<GridView
android:id="@+id/all_class_female_grid_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
您将 GridViews 放入 ScrollView
。它不会像您预期的那样工作。
尝试将 GridLayoutManager
与 RecyclerView
一起使用并将其放入 NestedScrollView
您可以查看 this 问题以获得详细解释。
如果你无论如何都想使用GridView,你可以使用这个ExpandableHeightGridView
扩展了 GridView
Use Recycler View or a non scrollable gridview if you want to use scrollview.
public class NonScrollGridView extends GridView{
public NonScrollGridView (Context context) {
super(context);
}
public NonScrollGridView (Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollGridView (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();
}
<NonScrollGridView
android:id="@+id/all_class_female_grid_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"/>
我想制作一个显示多个项目的布局,但我无法让它们完全展开,所以我使用了 ScrollView。但是,我发现我只能滚动第一个 GridView,最后两个项目不能向上滚动。 我需要的是两个GridView全显示,所有item都可以滚动,但是不知道怎么处理。
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ifchan.reader.AllClassActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/all_class_tool_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorToolbar"
app:title="All Class"
app:titleTextColor="#ffffff"/>
<ScrollView
android:id="@+id/all_class_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/all_class_tool_bar"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/all_class_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="male"
android:textSize="20dp"/>
<GridView
android:id="@+id/all_class_male_grid_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"/>
<TextView
android:id="@+id/all_class_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="female"
android:textSize="20dp"/>
<GridView
android:id="@+id/all_class_female_grid_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
您将 GridViews 放入 ScrollView
。它不会像您预期的那样工作。
尝试将 GridLayoutManager
与 RecyclerView
一起使用并将其放入 NestedScrollView
您可以查看 this 问题以获得详细解释。
如果你无论如何都想使用GridView,你可以使用这个ExpandableHeightGridView 扩展了 GridView
Use Recycler View or a non scrollable gridview if you want to use scrollview.
public class NonScrollGridView extends GridView{
public NonScrollGridView (Context context) {
super(context);
}
public NonScrollGridView (Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollGridView (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();
}
<NonScrollGridView
android:id="@+id/all_class_female_grid_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"/>