java - GridLayout 呈现方式与预览方式不同

标签 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>

样式.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 属性?如果我没有设置该属性,那么按钮将一直越过屏幕的末尾。

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

我的 Min SDK 是 17

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

最佳答案

改变你的 GridLayout 属性。

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

并将你的 GridLayout 放入 LinearView 并添加 gravityorientation 属性

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

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

关于java - GridLayout 呈现方式与预览方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48014616/

相关文章:

java - 创建专用于特定模块化应用程序的自定义运行时镜像

java - 替换自定义对象的 ArrayList 中的值

java - 变量在函数外丢失了它的值?

Android XML 格式不正确

java - 网格布局不起作用

java - maven测试jar : src/test/resources/file present but could not found by test

java - Servlet 适用于我的 Tomcat 服务器,但不适用于我的 Glassfish4 服务器

java - 同步对ArrayList的访问

html - 如何使用 DIVS 使用 Html 和 CSS 创建网格

html - 无法实现特定的 CSS 网格布局