【问题标题】:Dynamically set all item height in GridLayout based on item which has biggest height value根据高度值最大的项目动态设置GridLayout中的所有项目高度
【发布时间】:2019-08-20 13:01:14
【问题描述】:

我已经使用 GridLayout 创建了菜单。目前看起来是这样的:

它看起来很丑,因为具有最大高度值的项目与其他项目的高度不同。 我想要的是根据具有最大高度值的项目调整所有项目的高度,因此所有项目都处于相同的高度。我怎样才能做到这一点?

这是我的布局代码

 <GridLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:columnCount="2">

            <androidx.cardview.widget.CardView
                android:id="@+id/btn_info1"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_columnWeight="1"
                android:clickable="true"
                android:focusable="true"
                android:foreground="?android:attr/selectableItemBackground">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:padding="5dp"
                    android:text="1"
                    android:textAlignment="center"
                    android:textSize="24sp"
                    tools:ignore="HardcodedText" />

            </androidx.cardview.widget.CardView>

            <androidx.cardview.widget.CardView
                android:id="@+id/btn_info2"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_columnWeight="1"
                android:clickable="true"
                android:focusable="true"
                android:foreground="?android:attr/selectableItemBackground">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:padding="5dp"
                    android:text="2"
                    android:textAlignment="center"
                    android:textSize="24sp"
                    tools:ignore="HardcodedText" />

            </androidx.cardview.widget.CardView>

            <androidx.cardview.widget.CardView
                android:id="@+id/btn_info3"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_columnWeight="1"
                android:clickable="true"
                android:focusable="true"
                android:foreground="?android:attr/selectableItemBackground">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:padding="5dp"
                    android:text="3"
                    android:textAlignment="center"
                    android:textSize="24sp"
                    tools:ignore="HardcodedText" />

            </androidx.cardview.widget.CardView>

            <androidx.cardview.widget.CardView
                android:id="@+id/btn_info4"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_columnWeight="1"
                android:clickable="true"
                android:focusable="true"
                android:foreground="?android:attr/selectableItemBackground">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:padding="5dp"
                    android:text="ITEM WITH MAX HEIGHT"
                    android:textAlignment="center"
                    android:textSize="24sp"
                    tools:ignore="HardcodedText" />

            </androidx.cardview.widget.CardView>
        </GridLayout>

【问题讨论】:

    标签: android android-layout android-gridlayout


    【解决方案1】:

    如果您愿意使用ConstraintLayout,那么Barrier 完全符合您的要求,我已经尝试过了,它确实有效。

    Barrier 引用多个小部件作为输入,并根据指定一侧的最极端小部件创建虚拟指南。例如,左屏障将与所有引用视图的左侧对齐。

    这是一个很好的教程link

    【讨论】:

      【解决方案2】:

      看看这个, GridView rows overlapping: how to make row height fit the tallest item? 您还可以在网格布局中设置重力 = 中心以将所有项目对齐到中间。如果任何预期的项目高度超出某个限制,请将其放在滚动视图中。

      【讨论】:

        【解决方案3】:

        这是您的问题已解决的布局。 只需在布局文件中复制此行即可。

         <GridLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="5dp"
                    android:columnCount="2">
        
                <androidx.cardview.widget.CardView
                        android:id="@+id/btn_info1"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_margin="5dp"
                        android:layout_columnWeight="1"
                        android:clickable="true"
                        android:focusable="true"
                        android:foreground="?android:attr/selectableItemBackground">
        
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:minLines="2"        android:layout_gravity="center"
                            android:padding="5dp"
                            android:text="1"
                            android:textAlignment="center"
                            android:textSize="24sp"
                            tools:ignore="HardcodedText" />
        
                </androidx.cardview.widget.CardView>
        
                <androidx.cardview.widget.CardView
                        android:id="@+id/btn_info2"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_margin="5dp"
                        android:layout_columnWeight="1"
                        android:clickable="true"
                        android:focusable="true"
                        android:foreground="?android:attr/selectableItemBackground">
        
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:gravity="center"
                            android:minLines="2"      android:padding="5dp"
                            android:text="2"
                            android:textAlignment="center"
                            android:textSize="24sp"
                            tools:ignore="HardcodedText" />
        
                </androidx.cardview.widget.CardView>
        
                <androidx.cardview.widget.CardView
                        android:id="@+id/btn_info3"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_margin="5dp"
                        android:layout_columnWeight="1"
                        android:clickable="true"
                        android:focusable="true"
                        android:foreground="?android:attr/selectableItemBackground">
        
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:minLines="2"
                            android:layout_gravity="center"
                            android:padding="5dp"
                            android:text="3"
                            android:textAlignment="center"
                            android:textSize="24sp"
                            tools:ignore="HardcodedText" />
        
                </androidx.cardview.widget.CardView>
        
                <androidx.cardview.widget.CardView
                        android:id="@+id/btn_info4"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_margin="5dp"
                        android:layout_columnWeight="1"
                        android:clickable="true"
                        android:focusable="true"
                        android:foreground="?android:attr/selectableItemBackground">
        
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:padding="5dp"
                            android:text="ITEM WITH MAX HEIGHT"
                            android:textAlignment="center"
                            android:textSize="24sp"
                            tools:ignore="HardcodedText" />
        
                </androidx.cardview.widget.CardView>
            </GridLayout>
        

        【讨论】:

          猜你喜欢
          • 2010-11-07
          • 2022-09-27
          • 2019-03-26
          • 2019-10-02
          • 2019-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多