GridLayout 动态变化以填充 Gone 视图

Posted

技术标签:

【中文标题】GridLayout 动态变化以填充 Gone 视图【英文标题】:GridLayout dynamically change to fill Gone view 【发布时间】:2022-01-11 22:23:26 【问题描述】:

我正在使用 GridLayout 来设计一个基于 2 列的仪表板。所以我只是添加小部件,它直接定义了网格。

我遇到的问题是,我有 12 个单元格,但根据信息可用性,有些单元格将设置为 View.VISIBLEView.GONE。我遇到的问题是,当单元格设置为View.GONE 时,它没有显示,但空间仍然存在。

我希望当我将一个单元格设置为View.GONE 时,下一个设置为View.VISIBLE 的单元格会显示出来,并且不会让我的屏幕中间出现一个空单元格。

抱歉,我无法发布我的屏幕图像,所以我尝试制作一个。以上是我看到的。我期待当一个单元格设置为View.GONE 时,这些单元格会重新排列自己并且不会出现空单元格

我使用的xml是:

<GridLayout
                    android:id="@+id/grid"
                    android:layout_
                    android:layout_
                    android:layout_marginTop="20dp"
                    android:columnCount="2"
                    android:orientation="horizontal">

                    <include
                        android:id="@+id/button1"
                        android:layout_
                        android:layout_
                        android:layout_columnWeight="1"
                        layout="@layout/button_a"
                        bind:tileModel="@model.button1"/>

                    <include
                        android:id="@+id/button2"
                        android:layout_
                        android:layout_
                        android:layout_columnWeight="1"
                        layout="@layout/button_b"
                        bind:tileModel="@model.button2"/>

                    <include
                        android:id="@+id/button3"
                        android:layout_
                        android:layout_
                        android:layout_columnWeight="1"
                        layout="@layout/button_a"
                        bind:tileModel="@model.button3"/>

                    <include
                        android:id="@+id/button4"
                        android:layout_
                        android:layout_
                        android:layout_columnWeight="1"
                        layout="@layout/button_c"
                        bind:tileModel="@model.button4"/>

                    <include
                        android:id="@+id/button5"
                        android:layout_
                        android:layout_
                        android:layout_columnWeight="1"
                        layout="@layout/button_b"
                        bind:tileModel="@model.button5"/>

                    <include
                        android:id="@+id/button6"
                        android:layout_
                        android:layout_
                        android:layout_columnWeight="1"
                        layout="@layout/button_a"
                        bind:tileModel="@model.button6"/>


tileModel 接收 viewModel 并将信息传递给关联的布局。

有什么想法吗?

【问题讨论】:

如果您的数据是动态的,请以相同的方式构建布局。检查需要哪些信息(通过 ViewModel),然后在 gridview 中添加相关子项。 @DarShan 所以主要是通过编程方式,我只是添加我需要的东西,而不是试图让它们可见/消失 不,我的意思是 add 根据您的数据查看您需要的 GridView。 @DarShan 是的,但 add 是通过代码完成的。 XML 不应该包含任何项目,只有 GridLayout 和我在代码中使用 grid.add() 我建议使用带有 GridLayout 的 RecyclerView 和带有 DiffUtil 的 ListAdapter。您可以从项目的支持列表中添加和删除项目,它会为您设置动画。 【参考方案1】:

你应该试试 View.INVISIBLE 而不是 View.GONE,因为 View.INVISIBLE 只隐藏视图而不是它的空间,而 View.GONE 隐藏视图以及它占用的空间。

【讨论】:

以上是关于GridLayout 动态变化以填充 Gone 视图的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing - JPanel 和 GridLayout 边距/填充

动态创建选项卡 QTabWidget 并填充表格 QTableWidget

GridLayout 移除 JPanel 之间的填充

用图像填充 Python 的 Kivy 中的 GridLayout

ViewStub 与 View.GONE

Android GridLayout 怎么让4个TextView均匀填充布局界面