如何理解Android中的GridLayout?

时间:2016-01-13 19:37:08

标签: android xml layout

我正在尝试GridLayout使用Android Studio 1.5在Android中创建布局。初始的xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:useDefaultMargins="true"
    android:alignmentMode="alignBounds"
    android:columnOrderPreserved="false"
    android:columnCount="10"
    android:background="#cccccc"
    >

    <TextView
        android:text="Title"
        android:textSize="32dip"
        android:layout_columnSpan="10"
        android:layout_gravity="center_horizontal"
        android:id="@+id/textView1"
        android:layout_row="0"
        android:layout_column="0" />


    <TextView
        android:text="@string/new_name"
        android:layout_gravity="right"
        android:layout_row="2"
        android:layout_column="0"
        />

    <EditText
        android:ems="6"
        android:singleLine="true"
        android:inputType="textCapWords"
        android:id="@+id/new_name"
        android:layout_row="2"
        android:layout_column="1" />

    <ImageButton
        android:src="@mipmap/ic_backspace_black_24dp"
        android:id="@+id/clear_line"
        android:layout_row="2"
        android:layout_column="8"
        />

    <Button
        android:text="Search"
        android:id="@+id/new_search"
        android:background="@color/colorPrimaryDark"
        android:layout_column="9"
        android:layout_row="2" />


    <TextView
        android:text="@string/new_label"
        android:layout_gravity="right"
        android:layout_row="3"
        android:layout_column="0" />



    <EditText
        android:ems="6"
        android:singleLine="true"
        android:inputType="textCapWords"
        android:id="@+id/new_label"
        android:layout_row="3"
        android:layout_column="1" />

    ______

    <TextView
        android:layout_column="0"
        android:text="Row3"
        android:layout_gravity="right"
        />

    <EditText
        android:ems="7"
        android:singleLine="true"
        android:id="@+id/Row3"
        android:inputType="numberDecimal"
        android:layout_row="4"
        android:layout_column="1" />

    <TextView
        android:layout_column="0"
        android:text="Row4"
        android:layout_gravity="right"
        android:layout_row="5" />

    <EditText
        android:ems="7"
        android:singleLine="true"
        android:id="@+id/Row5"
        android:inputType="number"
        android:layout_row="5"
        android:layout_column="1" />



    <Space
        android:layout_row="4"
        android:layout_column="0"
        android:layout_columnSpan="3"
        android:layout_gravity="fill"
        />

    <Button
        android:text="Cancel"
        android:id="@+id/new_cancel"
        android:background="@color/colorPrimaryDark"
        android:layout_row="10"
        android:layout_column="0"
        />
    <Button
        android:text="Ok"
        android:id="@+id/new_ok"
        android:background="@color/colorPrimaryLight"
        android:layout_row="10"
        android:layout_column="9"
        />
</GridLayout>

,在预览中,呈现如下:

enter image description here

  1. 但是,在我的手机上,我看到退格区与“&#39;名称&#39;”的文字输入框略有重叠。这是我的手机还是Android Studio的问题?

  2. 我更改了第一个输入框的布局,如下所示:

  3. <EditText
        android:singleLine="true"
        android:inputType="textCapWords"
        android:id="@+id/new_name"
        android:columnCount="4"
        android:layout_row="2"
        android:layout_column="1"
    />
    

    虽然我指定了columnCount="4",但实际输入框非常小。这个属性似乎没有任何影响:

    enter image description here

    1. 我还原此更改,并尝试按如下方式调整退格图像的大小:
    2. <ImageButton
          android:src="@mipmap/ic_backspace_black_24dp"
          android:id="@+id/clear_line"
          android:layout_row="2"
          android:layout_column="8"
          android:minHeight=4
          android:minWidth=4
          android:maxHeight=4
          android:maxWidth=4
          />
      

      但它不会改变退格图像的大小。我也可以将数字设置为paranthesis,这会触发错误:

      `Cannot resolve symbol '4'`
      

      其他所有数字都可以放入parantheses,但不是吗?

      那有什么逻辑吗?或者在创建android框架时人们是否关闭了逻辑?有人可以用parantheses解释我的事吗?以及如何更改退格图像的大小?我查看了ImageButton doc,但找不到任何逻辑属性,例如&#39; size&#39; ...!

1 个答案:

答案 0 :(得分:1)

在您的情况下,我看不出使用GridLayout的原因,无论如何,这里是您的问题的答案:

1# - 在手机中,您会看到退格区与“名称”EditText重叠,因为没有足够的宽度可以在另一个旁边绘制4个视图

2# - 无需android:columnCount属性:

  

自动创建的最大列数   定位儿童。

这就是它没有做任何事情的原因。

3# - 当您尝试使用此代码时:

<ImageButton
    android:src="@mipmap/ic_backspace_black_24dp"
    android:id="@+id/clear_line"
    android:layout_row="2"
    android:layout_column="8"
    android:minHeight=4
    android:minWidth=4
    android:maxHeight=4
    android:maxWidth=4/>

您收到Cannot resolve symbol '4'错误,因为:

  • 1)4必须介于两个"之间。
  • 2)您必须指定单位(dppxsp ...)。

应该是这样的:

<ImageButton
        android:src="@mipmap/ic_backspace_black_24dp"
        android:id="@+id/clear_line"
        android:layout_row="2"
        android:layout_column="8"
        android:minHeight="15dp"
        android:minWidth="15dp"
        android:maxHeight="15dp"
        android:maxWidth="15dp"/> <!-- i used 15dp instead of 4dp because 4dp is too small -->

4# - 要更改View(案例中为Button)的大小,您可以使用android:layout_widthandroid:layout_height属性:

<ImageButton
    android:layout_width="12dp"
    android:layout_height="12dp"
    android:src="@mipmap/ic_backspace_black_24dp"
    android:id="@+id/clear_line"
    android:layout_row="2"
    android:layout_column="8"/>