是否可以在同一个GridLayout,Android中的不同列中设置不同数量的行单元格?

时间:2017-05-01 10:28:27

标签: android android-layout android-gridlayout

更新:问题解决了!详细说明

问题直截了当:

如标题中所述,是否可以根据特定列使用不同数量的行单元格? 例如,我有一个3X3大小的GridLayout,我想分别保留3行单元格中的第一列和第二列,但第三列使用4行单元格。我知道它违反了Grid"的整个规则,也许,但如果我使用垂直LinearLayout作为第三列,是否可能?实际上,我已经这样做了,但它没有用,所以你还有其他想法吗?

更详细的解释:(可能会花一些时间......)

我一直想做一些华丽而令人惊叹的东西,并且由于环境的原因,我已经间歇性地研究了Android开发。现在我想开始构建一些简单的东西,以加强我的知识,目前在UI构建中。所以我尝试实现Android默认计算器,如下所示,这非常漂亮,不是,个人思考。 Android 5.0 default calculator

我试图根据系统显示的界限将整个布局分为三个部分,实际上,它是两个部分,我将两个窗格组合在一起。

1.input_pane(使用 TextView

2.result_pane(使用 TextView

3.keypad_pane(使用 GridLayout

我使用LinearLayout将这三个部分组合在一起,同时,我还使用另一个LinearLayout将两个TextView包装在一起,因为我认为它们是相同的,处理类似的结果。

层次结构可以这样说明:

  • 的LinearLayout
    • 的LinearLayout
      • 的TextView(input_pane)
      • 的TextView(input_pane)
    • GridLayout的(键盘)

以下是代码:

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

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

            <TextView
                android:id="@+id/input_pane"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="3"/>

            <TextView
                android:id="@+id/result_pane"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"/>

        </LinearLayout>

        <android.support.v7.widget.GridLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:columnCount="4"
            app:columnOrderPreserved="true"
            android:layout_weight="3"
            app:rowCount="4">

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="0"
                android:text="9"
                />

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="1"
                android:text="8"
                />

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="2"
                android:text="7"
                />

            <Button
                app:layout_column="3"
                android:text="+"/>

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="0"
                android:text="6"
                />

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="1"
                android:text="5"
                />

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="2"
                android:text="4"
                />

            <Button
                app:layout_column="3"
                android:text="-"/>

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="0"
                android:text="3"
                />

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="1"
                android:text="2"
                />

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="2"
                android:text="1"
                />

            <Button
                app:layout_column="3"
                android:text="*"/>

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="0"
                android:text="."
                />

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="1"
                android:text="0"
                />

            <Button
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_columnWeight="1"
                app:layout_rowWeight="1"
                app:layout_column="2"
                android:text="="
                />

            <Button
                app:layout_column="3"
                android:text="/"/>

            <Button
                app:layout_column="3"
                android:text="C"/>
        </android.support.v7.widget.GridLayout>
    </LinearLayout>

这是我在the preview得到的东西,这让我灰心丧气(因为我已经从Android开发者网站上了解了关于GridLayout的资料,在这里也找到了类似的(几乎)答案,但是我很难从我发现的东西中得到我需要的东西。我已经完成了所有这些从今天早上8点开始,现在是18:22,好吧,我确实有过休息吃午饭)我甚至试图通过指定行和列来使用GridLayout来构建整个布局,但结果看起来比我先做的更糟糕。

所以,我来这里寻求帮助。我想知道,如果有一种方法可以让Gridlayout在不同的列中包含不同的行吗?那么问题应该解决了。但如果你有其他更好的解决方案来实现那种美丽的(在我看来)布局,我很乐意听到你的消息:)

(顺便说一句,这是一个微不足道但令人烦恼的问题,为什么关于如何建立一个漂亮的布局的细节如此之少?详细?好吧,似乎我仍然把更多时间放在它上面。)

提前致谢!

更新

因此,随着尝试GridLayout的不断尝试,我终于找到了解决方案。也就是说,通过明确地叹息单元格的位置,我可以在不同的列中实现不同数量的行单元格,但这次它不会成为相同的#34;网格布局。我的英语不好可能导致理解困难,所以不再说话,而是看代码。 (我只粘贴键盘部件代码,因为这是问题所在)

<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:orientation="vertical">

    <Button
        app:layout_row="0"
        app:layout_column="0"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"/>
    <Button
        app:layout_column="1"
        app:layout_row="0"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"/>
    <Button
        app:layout_column="2"
        app:layout_row="0"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"/>

    <Button
        app:layout_row="1"
        app:layout_column="0"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>
    <Button
        app:layout_row="1"
        app:layout_column="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>
    <Button
        app:layout_row="1"
        app:layout_column="2"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>


    <Button
        app:layout_row="2"
        app:layout_column="0"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>
    <Button
        app:layout_row="2"
        app:layout_column="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>
    <Button
        app:layout_row="2"
        app:layout_column="2"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>

    <Button
        app:layout_row="3"
        app:layout_column="0"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>
    <Button
        app:layout_row="3"
        app:layout_column="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>
    <Button
        app:layout_row="3"
        app:layout_column="2"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"/>

    <android.support.v7.widget.GridLayout
        app:layout_row="0"
        app:layout_column="3"
        app:layout_rowSpan="4"
        app:layout_rowWeight="1"
        app:orientation="vertical"
        app:layout_columnWeight="1">

        <Button
            app:layout_rowWeight="1"
            app:layout_columnWeight="1"/>
        <Button
            app:layout_rowWeight="1"
            app:layout_columnWeight="1"/>
        <Button
            app:layout_rowWeight="1"
            app:layout_columnWeight="1"/>
        <Button
            app:layout_rowWeight="1"
            app:layout_columnWeight="1"/>
        <Button
            app:layout_rowWeight="1"
            app:layout_columnWeight="1"/>
    </android.support.v7.widget.GridLayout>

</android.support.v7.widget.GridLayout>

这就是它,因为我第一次尝试构建一个简单而完整的APP仍然在路上,现在我将回到这个过程,所以欲了解更多信息,欢迎发表评论或发送电子邮件给我:D

1 个答案:

答案 0 :(得分:0)

您可以使用FlexboxLayout进行自定义编号。特定行上的列。 这将取决于孩子的大小。

你可以从下面的文档中看一下。

Developer docs

Medium article