Android - 根据GridLayout的子视图自动调整列

时间:2017-03-15 18:32:34

标签: android xml android-gridlayout

我想知道是否有办法根据子视图宽度设置GridLayout的列数,就像GridView在设置auto_fit时一样。

这是我对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

1 个答案:

答案 0 :(得分:1)

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

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