GridLayout列超出了它的范围

时间:2015-03-24 01:33:41

标签: android android-layout android-gridlayout

我尝试制作类似网格的形式,类似于the example on the official Android Developers blog.

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="48dp"
        android:layout_marginRight="48dp"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:columnCount="2"
        android:rowCount="2">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:layout_gravity="end"
            android:layout_row="0"
            android:text="Send"
            android:textColor="?android:attr/textColorPrimary"
            android:textSize="24sp" />

        <Spinner
            android:id="@+id/send_currency"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:layout_row="0" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:layout_gravity="end"
            android:layout_row="1"
            android:text="to"
            android:textColor="?android:attr/textColorPrimary"
            android:textSize="24sp" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:layout_row="1"
            android:hint="username"
            android:textColor="?android:attr/textColorPrimary"
            android:textSize="24sp" />
    </GridLayout>
</LinearLayout>

我的左栏(静态文字,右对齐)工作正常。它将文本与右对齐,宽度取决于最宽的行。

但是,右列似乎是在GridLayout的范围之外绘制的。

Layout preview with GridLayout selected

在该图片中,蓝色框是GridLayout的边界。您已经可以在顶部的绿色栏中看到问题。右侧应该停在GridLayout的边界(就像左侧一样),但由于某种原因,它会超越它。

Layout preview with right column selected

该图片中的蓝色框是EditText的边界(它设置为wrap_content)。然而,浅绿色的盒子是允许它扩展的范围。当我在EditText中输入大量字符时,它会经过GridLayout的边界,甚至超过手机屏幕的边缘!

Screenshot

这是GridLayout中的错误吗?或者我错过了什么?

4 个答案:

答案 0 :(得分:7)

这是GridLayout'正常'行为。

幸运的是,有一个GridLayout的新版本,它已经添加了API 21.由于这一事实,你可以让GridLayout容纳孩子们宽度或高度根据其方向。

要了解详情,请查看documentation ,尤其是课程概述 - &gt;多余的空间分布。您可以按照自己的方式找到有关如何使用GridLayout的信息。


提示:

不要忘记要使用新的GridLayout,您需要add it as support library以及xml中您应该使用的内容:

<android.support.v7.widget.GridLayout ... >

而不是

<GridLayout ... > 

答案 1 :(得分:2)

我发现this answer有帮助。另外,paulina_glab的答案是使用<android.support.v7.widget.GridLayout而不仅仅是<GridLayout - 谢谢!

特别是每个单元格上的这些属性:

android:layout_width="0dp"
app:layout_columnSpan="1"
app:layout_columnWeight="1"
app:layout_rowSpan="1"

希望它有所帮助。

答案 2 :(得分:1)

您可以将edittext限制为单行。

<EditText 
...
android:singleLine="true"
android:lines="1"
android:maxLines="1"
android:hint="to"></EditText>

答案 3 :(得分:0)

绝对奇怪。如果将EditText的宽度约束为&#34; match_parent&#34;会发生什么?而不是&#34; wrap_content&#34; (应该将其水平宽度限制在网格单元格内)?

        <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_column="1"
        android:layout_row="1"
        android:hint="username"
        android:textColor="?android:attr/textColorPrimary"
        android:textSize="24sp" />

或者,或者,给你的EditText一个正确的边距,试着稍微推动右边框?例如

android:layout_marginRight="20dp"

看看是否有所作为?