首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将GridLayout替换为LinearLayout

将GridLayout替换为LinearLayout
EN

Stack Overflow用户
提问于 2017-08-18 18:27:47
回答 2查看 1.8K关注 0票数 0

我有一个显示计算器屏幕的GridLayout。它在许多设备上看起来很不错,但在小型显示器甚至一些大显示器上却完全失败。有一个GridLayout实现中的错误,但谷歌并没有在这方面工作。你可以在我半岁的问题和一个公认的答案中看到细节:GridLayout在小型显示器上崩溃

我试图重新实现我的布局。我从没有运气的新ConstraintLayout开始。LinearLayout非常接近,但我未能伸展单个细胞。它们无法填补可用的空间。当我将宽度从wrap_content更改为match_parent时,布局完全中断。

所有源代码和示例应用程序都可以在https://github.com/literakl/CalcTrouble上获得。

电流线性布局

GridLayout当它工作时

Nexus 5上的断裂GridLayout

Nexus S上的破GridLayout

布局源代码

代码语言:javascript
运行
复制
<LinearLayout
android:id="@+id/calc_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/bg_calc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<!--Display row-->
<TextView
    android:id="@+id/assignment"
    android:text="50 + 40 = 90"
    style="@style/Formula"
    android:focusable="false"
    android:layout_width="match_parent"
    android:layout_height="@dimen/calc_display_height"
    tools:ignore="HardcodedText" />

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

    <!-- row with 7-9,+ -->
    <LinearLayout
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="match_parent">
    <Button
        android:id="@+id/digit7"
        android:text="7"
        style="@style/KeypadLeftButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText"  />

    <Button
        android:id="@+id/digit8"
        android:text="8"
        style="@style/KeypadButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText"  />

    <Button
        android:id="@+id/digit9"
        android:text="9"
        style="@style/KeypadButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />

    <Button
        android:id="@+id/buttonPlus"
        android:text="+"
        style="@style/KeypadFunctionRightButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />
    </LinearLayout>

    <!--row with 4-6, - -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        >

    <Button
        android:id="@+id/digit4"
        android:text="4"
        style="@style/KeypadLeftButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />

    <Button
        android:id="@+id/digit5"
        android:text="5"
        style="@style/KeypadButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />

    <Button
        android:id="@+id/digit6"
        android:text="6"
        style="@style/KeypadButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText"  />

    <Button
        android:id="@+id/buttonMinus"
        android:text="-"
        style="@style/KeypadFunctionRightButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />
    </LinearLayout>

    <!--row with 1-3, * -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        >

    <Button
        android:id="@+id/digit1"
        android:text="1"
        style="@style/KeypadLeftButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText"  />

    <Button
        android:id="@+id/digit2"
        android:text="2"
        style="@style/KeypadButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText"  />

    <Button
        android:id="@+id/digit3"
        android:text="3"
        style="@style/KeypadButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />

    <Button
        android:id="@+id/buttonMultiply"
        android:text="\u22C5"
        style="@style/KeypadFunctionRightButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />
    </LinearLayout>

    <!--row with 0, backspace and / -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        >

    <Button
        android:id="@+id/digit0"
        android:text="0"
        style="@style/KeypadLeftButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        tools:ignore="HardcodedText"  />

    <Button
        android:id="@+id/buttonBackspace"
        android:text="←"
        style="@style/KeypadFunctionButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnSpan="2"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />

    <Button
        android:id="@+id/buttonDivide"
        android:text=":"
        style="@style/KeypadFunctionRightButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_rowWeight="1"
        app:layout_columnWeight="1"
        tools:ignore="HardcodedText" />
    </LinearLayout>
</LinearLayout>

<!--row with button submit -->

<Button
    android:id="@+id/buttonSubmit"
    android:text="@string/action_next_formula"
    style="@style/KeypadNextButton"
    android:layout_width="match_parent"
    android:layout_height="@dimen/calc_next_height"
    app:layout_gravity="fill_horizontal"/>

</LinearLayout>

我如何才能达到期望的外观,将工作在所有的设备?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-18 18:40:35

使按钮的width0dpheightmatch_parentlayout_weight1,如下所示,单行示例如下所示

代码语言:javascript
运行
复制
    <!-- row with 7-9,+ -->
    <LinearLayout
        android:layout_height="0dp"
        android:layout_weight="1"
        android:weightSum ="4"
        android:orientation="horizontal"
        android:layout_width="match_parent">
    <Button
        android:id="@+id/digit7"
        android:text="7"
        style="@style/KeypadLeftButton"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:ignore="HardcodedText"  />

    <Button
        android:id="@+id/digit8"
        android:text="8"
        style="@style/KeypadButton"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:ignore="HardcodedText"  />

    <Button
        android:id="@+id/digit9"
        android:text="9"
        style="@style/KeypadButton"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:ignore="HardcodedText" />

    <Button
        android:id="@+id/buttonPlus"
        android:text="+"
        style="@style/KeypadFunctionRightButton"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:ignore="HardcodedText" />
    </LinearLayout>
</LinearLayout>
票数 1
EN

Stack Overflow用户

发布于 2017-08-18 20:23:01

使用ConstraintLayouts,您可以实现以下目标:

布局代码:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                             xmlns:app="http://schemas.android.com/apk/res-auto"
                                             xmlns:tools="http://schemas.android.com/tools"
                                             android:layout_width="match_parent"
                                             android:layout_height="match_parent">

    <Button
        android:id="@+id/button_top"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Button"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <Button
        android:id="@+id/button_bottom"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_marginBottom="9dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>

    <android.support.constraint.ConstraintLayout
        android:id="@+id/constraintLayout_content"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:paddingLeft="6dp"
        android:paddingRight="6dp"
        app:layout_constraintBottom_toTopOf="@+id/button_bottom"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_top">

        <android.support.constraint.ConstraintLayout
            android:id="@+id/first_row"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:paddingLeft="6dp"
            android:paddingRight="6dp"
            app:layout_constraintBottom_toTopOf="@+id/second_row"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <Button
                android:id="@+id/button_first_first"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button_first_second"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_first_second"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_first_first"
                app:layout_constraintRight_toLeftOf="@+id/button_first_third"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_first_third"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_first_second"
                app:layout_constraintRight_toLeftOf="@+id/button_first_fourth"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_first_fourth"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_first_third"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>

        </android.support.constraint.ConstraintLayout>

        <android.support.constraint.ConstraintLayout
            android:id="@+id/second_row"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:paddingLeft="6dp"
            android:paddingRight="6dp"
            app:layout_constraintBottom_toTopOf="@+id/third_row"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/first_row">

            <Button
                android:id="@+id/button_second_first"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button_second_second"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_second_second"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_second_first"
                app:layout_constraintRight_toLeftOf="@+id/button_second_third"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_second_third"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_second_second"
                app:layout_constraintRight_toLeftOf="@+id/button_second_fourth"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_second_fourth"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_second_third"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>

        </android.support.constraint.ConstraintLayout>

        <android.support.constraint.ConstraintLayout
            android:id="@+id/third_row"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:paddingLeft="6dp"
            android:paddingRight="6dp"
            app:layout_constraintBottom_toTopOf="@+id/fouth_row"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/second_row">

            <Button
                android:id="@+id/button_third_first"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button_third_second"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_third_second"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_third_first"
                app:layout_constraintRight_toLeftOf="@+id/button_third_third"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_third_third"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_third_second"
                app:layout_constraintRight_toLeftOf="@+id/button_third_fourth"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_third_fourth"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toRightOf="@+id/button_third_third"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>

        </android.support.constraint.ConstraintLayout>

        <android.support.constraint.ConstraintLayout
            android:id="@+id/fouth_row"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:paddingLeft="6dp"
            android:paddingRight="6dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/third_row">

            <Button
                android:id="@+id/button_fourth_first"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintHorizontal_weight="0.5"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button_fourth_second"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_fourth_second"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintHorizontal_weight="1"
                app:layout_constraintLeft_toRightOf="@+id/button_fourth_first"
                app:layout_constraintRight_toLeftOf="@+id/button_fourth_third"
                app:layout_constraintTop_toTopOf="parent"/>

            <Button
                android:id="@+id/button_fourth_third"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginBottom="2dp"
                android:layout_marginEnd="2dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:text="Button"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintHorizontal_weight="0.5"
                app:layout_constraintLeft_toRightOf="@+id/button_fourth_second"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>

        </android.support.constraint.ConstraintLayout>
    </android.support.constraint.ConstraintLayout>


</android.support.constraint.ConstraintLayout>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45762927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档