我有一个活动,在Fragments
中显示4个ScrollView
。我难以正确调整片段大小。
所以,我在主文件中:
<android.support.constraint.ConstraintLayout
android:id="@+id/cl_main"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TextView
android:id="@+id/tv_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<android.support.v4.widget.NestedScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/adView"
app:layout_constraintTop_toBottomOf="@id/tv_title">
<LinearLayout
android:id="@+id/ll_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<fragment
android:id="@+id/fragment_1"
android:name="sharongilmore.knitoodle.fragments.Fragment1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<fragment
android:id="@+id/fragment_2"
android:name="sharongilmore.knitoodle.fragments.Fragment2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<fragment
android:id="@+id/fragment_3"
android:name="sharongilmore.knitoodle.fragments.Fragment3"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<fragment
android:id="@+id/fragment_4"
android:name="sharongilmore.knitoodle.fragments.Fragment4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<include
android:id="@+id/adView"
layout="@layout/layout_ad_view"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>
想法是将垂直列出这四个片段,并将tv_title和adView分别固定在屏幕的顶部和底部。这些片段位于NestedScrollView中,因此用户可以滚动浏览它们。
片段1包含一个GridView,这似乎引起了问题。如果我将GridView的高度固定为100dp,它将显示正常。但是,如果我将其设置为“ wrap_content”,则仅显示GridView的顶行。
片段1的布局是:
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/fragment_1_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/str_title_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<GridView
android:id="@+id/gridview_itemList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnWidth="@dimen/grid_cell_column_width"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:padding="@dimen/dimen_s"
android:paddingBottom="@dimen/dimen_std"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"
app:layout_constraintTop_toBottomOf="@+id/fragment_1_title" />
</android.support.constraint.ConstraintLayout>
显示此内容时,GridView应该包含2行项目,但我只能看到第一行。
GridView的填充方式如下(在Fragment1.java中):
public class Fragment1 extends Fragment {
private ArrayList<MyItem> mItems;
private GridView mGrid;
// NEW INSTANCE
static public Fragment1 newInstance(ArrayList<MyItem> items) {
Fragment1 f = new Fragment1();
f.setRequiredData(items);
return f;
}
private void setRequiredData(ArrayList<MyItem> items) {
mItems = items;
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_1, container, false);
mGrid = rootView.findViewById(R.id.gridview_itemList);
initialiseWithItems();
return rootView;
}
public void setItems(ArrayList<MyItem> items) {
mItems = items;
initialiseWithItems();
}
private void initialiseWithItems() {
if (mItems == null) return;
if(mGrid == null) return;
// Now set up Adapter to display items in grid
ItemAdapter mItemAdapter
= new ItemAdapter(mItems);
mGrid.setAdapter(mItemAdapter);
}
}
因此,我想问题是它为GridView分配了要在填充之前显示的空间,然后一旦填充,分配的空间就不会改变。是吗?
关于如何修复它的任何建议?