GridLayout呈现与预览不同的呈现方式

时间:2017-12-28 21:30:33

标签: java android grid-layout

在我的计算器应用程序中,我使用GridLayout来布局所有按钮。在Android Studio预览中,它看起来像这样:

enter image description here

然而,当我在Nexus 5x仿真器上运行我的应用程序时,它看起来像这样:

enter image description here

这是我的布局文件的代码

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    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"
    tools:context="net.abc.deskcalculator.MainActivity"

    android:layout_margin="8dp"
    android:id="@+id/grid"
    android:columnCount="7"
    android:layout_gravity="fill_horizontal">

    <TextView
        android:id="@+id/mode"
        android:layout_columnSpan="7"
        android:layout_column="0"
        android:layout_row="0"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="RAD"/>

    <TextView
        android:id="@+id/window"
        android:layout_width="match_parent"
        android:layout_column="0"
        android:layout_columnSpan="7"
        android:layout_rowSpan="2"
        android:layout_row="1"
        android:text=""
        android:minLines="2"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:fontFamily="serif-monospace"
        android:background="@drawable/window_border"/>

    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/bkspc"
        android:text="@string/bkspc"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/clr"
        android:text="@string/clr"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="@string/switchDegRadGrad"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/lparen"
        android:text="@string/lparen"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/rparen"
        android:text="@string/rparen"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="floor"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="ceil"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="√"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="log"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="ln"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/dig7"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/dig8"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/dig9"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/opDiv"
        android:text="@string/opDiv"
        />
    <Button
        style="@style/calcBtnApperance"
        android:text="x²"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="EE"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="exp"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/dig4"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/dig5"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/dig6"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/opMul"
        android:text="@string/opMul"
        />
    <Button
        style="@style/calcBtnApperance"
        android:text="π"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="a^b"/>
    <Button
        style="@style/calcBtnApperance"
        android:text="cbrt"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/dig1"/>
    <Button
        style="@style/calcBtnApperance"

        android:id="@+id/dig2"/>
    <Button
        style="@style/calcBtnApperance"

        android:id="@+id/dig3"/>
    <Button
        style="@style/calcBtnApperance"

        android:id="@+id/opSub"
        android:text="@string/opSub"
        />
    <Button
        style="@style/calcBtnApperance"

        android:text="sin"/>
    <Button
        style="@style/calcBtnApperance"

        android:text="cos"/>
    <Button
        style="@style/calcBtnApperance"

        android:text="tan"/>
    <Button
        style="@style/calcBtnApperance"

        android:text="@string/decpt"/>
    <Button
        style="@style/calcBtnApperance"

        android:id="@+id/dig0"/>
    <Button
        style="@style/calcBtnApperance"
        android:id="@+id/neg"
        android:text="@string/neg"/>
    <Button
        style="@style/calcBtnApperance"

        android:text="@string/opAdd"
        android:id="@+id/opAdd"/>
    <Button
        style="@style/calcBtnApperance"

        android:text="asin"/>
    <Button
        style="@style/calcBtnApperance"

        android:text="acos"/>
    <Button
        style="@style/calcBtnApperance"

        android:text="atan"/>
    <Button
        style="@style/calcBtnApperance"

        android:id="@+id/varAns"
        android:text="@string/varAns"/>
    <Button
        style="@style/calcBtnApperance"

        android:text="@string/equals"
        android:layout_columnSpan="3"
        android:layout_gravity="fill_horizontal"
        android:id="@+id/equals"/>
</GridLayout>

STYLES.XML

<style name="calcBtnApperance">
    <item name="android:textSize">14sp</item>
    <item name="android:textColor">#fd3d3d3d</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:minWidth">49dp</item>
    <item name="android:layout_gravity">center_horizontal</item>
</style>

(我知道这段代码是重复的,但我发布了完整的内容以防万一。)

如何在最后一栏之前没有这么大的差距?

另外,如果添加新列而不必在每次添加新列时调整android:minWidth属性,如何使表格的每个单元格变得更窄?如果我没有设置该属性,那么按钮将继续超过屏幕的末尾。

我认为这两个是同一问题的症状。

My Min SDK是17

编辑:数字以编程方式填写,这就是您在Android Studio预览中看不到它们的原因。

1 个答案:

答案 0 :(得分:1)

更改GridLayout属性。

android:layout_width="wrap_content"
android:layout_height="wrap_content"

并将GridLayout置于LinearView内并添加gravityorientation属性

android:orientation="vertical"
android:gravity="center_horizontal"

但是,我认为这种设计如果在较小的设备上进行测试,某些按钮将会离开屏幕