【问题标题】:android grid layout sizeandroid网格布局大小
【发布时间】:2016-04-28 23:15:15
【问题描述】:

我一直在不同设备上测试我的程序,但布局总是不同。这是布局的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<TextView
    android:id="@+id/counterView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textSize="50dp" />

<EditText
    android:id="@+id/passwordField"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/counterView"
    android:layout_marginTop="30dp"
    android:cursorVisible="false"
    android:editable="false"
    android:ems="10"
    android:gravity="center"
    android:inputType="textPassword"
    android:maxLength="8"
    android:textSize="50dp" />


<GridLayout
    android:id="@+id/numberPad"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/passwordField"
    android:columnCount="3"
    android:horizontalSpacing="0dp"
    android:rowCount="6"
    android:stretchMode="columnWidth"
    android:verticalSpacing="0dp">


    <Button
        android:id="@+id/btnOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:layout_row="0"
        android:onClick="addInput"
        android:text="@string/one" />

    <Button
        android:id="@+id/btnTwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="1"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:layout_row="0"
        android:onClick="addInput"
        android:text="@string/two" />

    <Button
        android:id="@+id/btnThree"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="2"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:layout_row="0"
        android:onClick="addInput"
        android:text="@string/three" />

    <Button
        android:id="@+id/btnFour"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:onClick="addInput"
        android:text="@string/four" />

    <Button
        android:id="@+id/btnFive"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:onClick="addInput"
        android:text="@string/five" />

    <Button
        android:id="@+id/btnSix"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:onClick="addInput"
        android:text="@string/six" />

    <Button
        android:id="@+id/btnSeven"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:onClick="addInput"
        android:text="@string/seven" />

    <Button
        android:id="@+id/btnEight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:onClick="addInput"
        android:text="@string/eight" />

    <Button
        android:id="@+id/btnNine"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:onClick="addInput"

        android:text="@string/nine" />

    <Button
        android:id="@+id/btnZero"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnSpan="3"
        android:layout_columnWeight="3"
        android:layout_gravity="fill_horizontal"
        android:onClick="addInput"
        android:text="@string/zero" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_columnSpan="3"
        android:layout_columnWeight="3"
        android:layout_gravity="fill_horizontal"
        android:layout_row="4"
        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/plantBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_columnSpan="3"
        android:layout_columnWeight="3"
        android:layout_gravity="fill"
        android:layout_row="5"
        android:onClick="plantBomb" />
</GridLayout>

第 3 列似乎有不同的宽度,我该如何解决这个问题? 部分设备使用的是 android 4.x 及更高版本。

编辑 在更大的设备上试了一下,输出是这样的

【问题讨论】:

标签: android grid-layout android-gridlayout


【解决方案1】:

你可以从布局文件夹中使用

例如:

res/layout/my_layout.xml             // 470dp x 320dp //layout for normal screen size ("default")
res/layout-small/my_layout.xml       // 426dp x 320dp //layout for small screen size
res/layout-large/my_layout.xml       //640dp x 480dp // layout for large screen size
res/layout-xlarge/my_layout.xml     // 960dp x 720dp  // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

【讨论】:

  • 能否给我一些关于它是如何工作的信息?这是我的第一个安卓应用
【解决方案2】:

好的

您可以在每组中手动创建所有大小的文件夹。

考虑下图:

【讨论】:

  • 是设备大小的实际问题吗?因为我尝试制作具有不同屏幕尺寸的虚拟设备,并且效果很好
  • 可以,不过也可以利用其他方式,不过我觉得这样是对的。
  • 我需要做的就是创建文件夹并将xml复制并粘贴到其中,对吗?我不需要特别添加或更改什么?
  • 是的,不难。
  • 非常感谢,我已经设置好了,现在请朋友在他的设备上测试一下
【解决方案3】:

在 API 级别 21 中添加了属性 android:layout_columnWeight,如果您的应用需要支持 Android 4.x,请尝试将 android.support.v7.widget.GridLayout 与 app:layout_columnWeight 一起使用。

【讨论】: