如何使用动态大小制作ListView的GridView

时间:2014-09-05 06:19:43

标签: android android-layout gridview android-listview android-gridview

一般来说,我正在尝试重新制作此布局: iOS SS

这个想法是你有父类别(每个列表中的顶部项目),然后是它的子类别列表。我从服务器上获得这些信息,所以我不能做任何事情。没有任何布局在代码中被修改,目前我只是想让布局工作,然后我将它连接到实际数据。 片段布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.<redacted>.app.EditCategoriesActivity.EditCategoriesFragment">

<GridView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="@dimen/edit_categories_list_width"
    android:id="@+id/edit_categories_grid"
    android:gravity="center_horizontal"
    android:numColumns="auto_fit"
    android:stretchMode="spacingWidthUniform"/>

</RelativeLayout>

GridView项目视图布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/border_box"
android:orientation="vertical">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Test Cat"
    android:layout_weight="1"
    android:id="@+id/edit_categories_grid_item_parent_name"
    android:layout_margin="10dp"/>
<Switch
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:paddingEnd="30dp"
    android:paddingRight="30dp"
    android:id="@+id/edit_categories_grid_item_parent_switch"/>
</LinearLayout>
<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:minHeight="?android:attr/listPreferredItemHeightLarge"
    android:layout_below="@id/edit_categories_grid_item_parent_name"
    android:id="@+id/edit_categories_grid_item_list"
    android:layout_margin="10dp"
    android:paddingStart="30dp"
    android:paddingLeft="30dp"
    android:clickable="true"
    android:choiceMode="singleChoice"
    />

</LinearLayout>

ListView项目布局:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:layout_gravity="center_vertical">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:layout_alignParentStart="true"
    android:layout_alignParentLeft="true"
    android:text="Child"
    android:id="@+id/edit_categories_list_item_title"/>
<Switch
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center_vertical"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:gravity="center_vertical|end"
    android:id="@+id/edit_categories_list_item_switch"/>

</RelativeLayout>

目前它看起来像这样: Current Android

测试数据的结构是:

  

测试1&GT;

     

测试儿童猫

     

测试儿童猫2

-

  

的Test2&GT;

     

TestChild Cat -2

     

TestChild Cat 2 -2

     

TestChild Cat 3 -2

     

TestChild Cat 4 -2

     

TestChild Cat 5 -2

     

TestChild Cat 6 -2

     

TestChild Cat 7 -2

     

TestChild Cat 8 -2

- 此外,列表视图非常难以滚动...我的意思是我试图在#34;点击区域滚动它们&#34;在我的测试中已经超过一百次而且只有1次(如果重要的话,测试2一次)滚动一次......是的...

理想情况下,所有列表项都会显示,并且gridview项目中不会滚动,只有gridview本身。

如果有任何我认为有帮助的信息,请告诉我。就像我说的那样,我基本上只是将数据绑定到代码中的视图中,所以我可以看到它会如何影响布局......除了数据本身的结构之外,你知道。 &GT;&GT;

无论如何,谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

最后得到的几乎就是我设想的方式!

我首次尝试更改是删除列表视图并将其替换为LinearLayouts垂直方向,然后循环覆盖数据以填充它并为数据的所有视图充气。这种方式有效,但GridView的“单元格”会相互重叠,并在滚动时重新定位......不用说这不太理想。

然后我再次看了GridLayout并决定尝试填充它基本上与LinearLayouts相同,它几乎完美地工作!把它扔进ScrollView,它正在工作!现在单元格没有按照我想要的方式排列,我必须为不同的设备提供多个布局文件,因为它没有列的auto-fit选项,但总体而言我很满意结果!此外,另一个明显的缺点是,它不再被回收,但我知道我不会有大量的数据,并且有0个图像加载所以我很幸运,因为我没有得到它。希望这有助于其他人!

P.S。一旦RecycleView完全释放并且稳定,它可能就是这样,如果你还没有看过,那就做! ^ _ ^