Android - 根据 GridLayout 的 subview 自动调整列

标签 android xml android-gridlayout

我想知道是否有一种方法可以根据 subview 宽度设置 GridLayout 的列数,就像设置 auto_fit 时 GridView 所做的那样。

这是我的 MainActivity 的 xml 代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.hannahkwon.bluetooth1.MainActivity">

    <include
        android:id="@+id/toolBar"
        layout="@layout/toolbar">
    </include>

    <LinearLayout
        android:orientation="vertical"
        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">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="Bluetooth is off"
                android:id="@+id/txt_BtStatus"/>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider"/>

            <GridLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="1dp"
                android:id="@+id/gridLayout_Channels"
                android:columnCount="7">

                <CheckBox
                    android:text="Channel 1"
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"
                    android:id="@+id/checkBox_DS1"
                    android:textSize="16sp"
                    android:paddingRight="8dp"
                    android:paddingLeft="8dp" />

                <CheckBox
                    android:text="Channel 2"
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"
                    android:id="@+id/checkBox_DS2"
                    android:textSize="16sp"
                    android:paddingRight="8dp"
                    android:paddingLeft="8dp" />

                <CheckBox
                    android:text="Channel 3"
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"
                    android:id="@+id/checkBox_DS3"
                    android:textSize="16sp"
                    android:paddingRight="8dp"
                    android:paddingLeft="8dp" />

                <CheckBox
                    android:text="Channel 4"
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"
                    android:id="@+id/checkBox_DS4"
                    android:textSize="16sp"
                    android:paddingRight="8dp"
                    android:paddingLeft="8dp" />

                <CheckBox
                    android:text="Channel 5"
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"
                    android:id="@+id/checkBox_DS5"
                    android:textSize="16sp"
                    android:paddingRight="8dp"
                    android:paddingLeft="8dp" />

                <CheckBox
                    android:text="Channel 6"
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"
                    android:id="@+id/checkBox_DS6"
                    android:textSize="16sp"
                    android:paddingRight="8dp"
                    android:paddingLeft="8dp" />

                <CheckBox
                    android:text="Channel 7"
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"
                    android:id="@+id/checkBox_DS7"
                    android:textSize="16sp"
                    android:paddingRight="8dp"
                    android:paddingLeft="8dp" />

                <CheckBox
                    android:text="Channel 8"
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"
                    android:id="@+id/checkBox_DS8"
                    android:textSize="16sp"
                    android:paddingRight="8dp"
                    android:paddingLeft="8dp" />

            </GridLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider"/>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:layout_alignParentTop="true"
                    android:layout_centerHorizontal="true">

                    <EditText
                        android:id="@+id/editTxt_Minute"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:inputType="number"/>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:paddingBottom="16dp"
                        android:paddingLeft="8dp"
                        android:paddingRight="8dp"
                        android:paddingTop="16dp"
                        android:text=":"
                        android:textAppearance="?android:attr/textAppearanceLarge" />

                    <EditText
                        android:id="@+id/editTxt_Second"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:paddingRight="8dp"
                        android:inputType="number"/>

                    <Button
                        android:id="@+id/btn_Start"
                        android:layout_width="wrap_content"
                        android:layout_height="36dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginBottom="6dp"
                        android:layout_marginTop="6dp"
                        android:paddingLeft="16dp"
                        android:paddingRight="16dp"
                        android:text="Start"
                        android:textSize="12sp" />

                    <Button
                        android:id="@+id/btn_Cancel"
                        android:layout_width="wrap_content"
                        android:layout_height="36dp"
                        android:layout_gravity="center_vertical"
                        android:layout_marginBottom="6dp"
                        android:layout_marginTop="6dp"
                        android:paddingLeft="16dp"
                        android:paddingRight="16dp"
                        android:text="Cancel"
                        android:textSize="12sp" />

                </LinearLayout>

            </RelativeLayout>

            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <LinearLayout
                    android:orientation="vertical"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1">

                    <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="0dp"
                        android:layout_weight="1">

                        <fragment
                            android:id="@+id/graph_1"
                            android:name="com.example.hannahkwon.bluetooth1.GraphFragment"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_weight="1"
                            android:tag="Fragment1" />

                    </LinearLayout>                     
                </LinearLayout>

            </LinearLayout>

        </LinearLayout>
    </LinearLayout>

</LinearLayout>

基本上,我想要这个

enter image description here

成为这个

enter image description here

最佳答案

您可以使用 Google 的 FlexBoxLayout 并将 flexWrap 设置为“wrap”: https://github.com/google/flexbox-layout

README 应该为您提供实现它所需的所有信息(从未尝试过,但它看起来简单而强大)

关于Android - 根据 GridLayout 的 subview 自动调整列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817992/

相关文章:

c# - 单线程应用程序显示类似竞争条件的行为

java - XMLUNIT 忽略 xmlns?

php - 如何使用 curl 和 php 从另一个域获取 json 数据?

android - 如何让ImageView与2个Button部分重叠?

android - 谷歌地图安卓 : snap polyline to street

java - Android 如何在点击按钮时首先在日期选择器中显示年份

android - 我怎样才能在 GridView android 中获得垂直滚动?

android - 如何为 View 的笔划宽度设置动画

android.support.v7.widget.GridLayout 无法让它工作

android - 指定列跨度和行跨度时 GridLayout 的工作原理