我的布局中有一个GridView
应该占用尽可能多的空间(布局的所有其他元素都有固定大小)。
我希望Views
单元格中的所有GridView
占用尽可能宽的宽度,即除GridView
定义的间距外不留任何额外空间。< / p>
我希望GridView
的列数由以下约束自动确定:
200dp
(除非网格视图本身较小)300dp
对于这个android需要以某种方式单独确定正确的列数(如果单元格宽度未知,则auto_fit
默认为2)。问题是,我ListAdapter
传递带有Views
的单元格getView()
的实施必须在网格视图的宽度已知之前提供正确大小的视图(parent.getWidth()
将返回0最初)。
因此,在布局阶段,网格视图的宽度尚不清楚,但网格视图仍然想知道列数。为了根据我的约束确定列数,我必须知道网格视图的宽度(因为它占用了所有可用空间,无论如何这应该是可以知道的。)
还可以在Views
上设置最小宽度和高度,但这似乎对网格视图的列宽没有帮助。
那么如何以编程方式强制执行所有这些约束呢?
答案 0 :(得分:0)
最后,它比我在开始时想象的容易得多。
如果您:
,Android会自动为您做或多或少android:numColumns="auto_fit" android:stretchMode="columnWidth"
并android:minWidth="200dp"
android:layout_width="match_parent" android:layout_height="match_parent"
这意味着每列必须至少为200 dp并且android将确定列数,以便设置列宽度至少为200 dp的最大列数,如果列更宽,它将拉伸细胞(均匀)。
我有更复杂的解决方案涉及getViewTreeObserver().addOnGlobalLayoutListener()
等待网格视图确定它的大小而不是自己计算列数然后设置Adapter
但是上面的解决方案是结果相同,费用也少得多。