使用GridLayout编辑屏幕外的文本

时间:2014-07-04 08:44:59

标签: android android-layout textfield android-gridlayout

我有以下布局,编辑文本显然没有任何理由离开屏幕。我试图找到类似的问题,但我无法做到。它应该是一个简单的,但我没有运气就尝试过很多东西。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <GridLayout
        android:id="@+id/gridLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:columnCount="2"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/titleTextView"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text="dsgsdgsd"
            android:textColor="@color/red"
            android:textStyle="bold" />

        <View
            android:layout_width="fill_parent"
            android:layout_height="2dip"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:background="@color/red" />

        <TextView
            android:id="@+id/textTitle"
            android:layout_gravity="left"
            android:background="#ffffff"
            android:paddingLeft="15dp"
            android:text="Title"
            android:textColor="@color/grey" />

        <EditText
            android:id="@+id/editTitle"
            android:layout_gravity="right"
            android:inputType="text">
        </EditText>

        <View
            android:layout_height="1dip"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:background="#E6E6E6" />

        <TextView
            android:id="@+id/textCategory"
            android:layout_gravity="left"
            android:background="#ffffff"
            android:gravity="left"
            android:paddingLeft="15dp"
            android:text="Category"
            android:textColor="@color/grey" />

        <EditText
            android:id="@+id/editCategory"
            android:layout_width="225dp"
            android:layout_gravity="right"
            android:inputType="text" />            

        <Button
            android:id="@+id/btnCreateAccount"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="#ffffff"
            android:onClick="createExpense"
            android:text="Done"
            android:textColor="@color/red" />
    </GridLayout>

5 个答案:

答案 0 :(得分:1)

检查更新后的代码:

您缺少一些宽度,高度属性,并且您在之前的元素(如View)中使用了match_parent,这阻止了任何后续元素在屏幕上获取空间。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <GridLayout
        android:id="@+id/gridLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:columnCount="2"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/titleTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text="dsgsdgsd"
            android:textColor="@color/red"
            android:textStyle="bold" />

        <View
            android:layout_width="wrap_content"
            android:layout_height="2dip"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:background="@color/red" />

        <TextView
            android:id="@+id/textTitle"
            android:layout_gravity="left"
            android:background="#ffffff"
            android:paddingLeft="15dp"
            android:text="Title"
            android:textColor="@color/grey" />

        <EditText
            android:id="@+id/editTitle"
            android:layout_gravity="right"
            android:inputType="text" >
        </EditText>

        <View
            android:layout_width="wrap_content"
            android:layout_height="1dip"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:background="#E6E6E6" />

        <TextView
            android:id="@+id/textCategory"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:background="#ffffff"
            android:gravity="left"
            android:paddingLeft="15dp"
            android:text="Category"
            android:textColor="@color/grey" />

        <EditText
            android:id="@+id/editCategory"
            android:layout_width="225dp"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:inputType="text" />

        <Button
            android:id="@+id/btnCreateAccount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="#ffffff"
            android:onClick="createExpense"
            android:text="Done"
            android:textColor="@color/red" />
    </GridLayout>

</LinearLayout>

由于缺少资源而导致错误的输出没有颜色和背景:

enter image description here

在这里,您可以在屏幕上看到两个edittexts。

答案 1 :(得分:0)

试试这可能对你有帮助

<GridLayout
    android:id="@+id/gridLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:columnCount="2"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/titleTextView"
        android:layout_columnSpan="2"
        android:layout_gravity="left"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:paddingBottom="10dp"
        android:paddingTop="10dp"
        android:text="dsgsdgsd"
        android:textColor="@color/red"
        android:textStyle="bold" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="2dip"
        android:layout_columnSpan="2"
        android:layout_gravity="left"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@color/red" />

    <TableRow android:id="@+id/tableRow1" >

        <TextView
            android:id="@+id/textTitle"
            android:background="#ffffff"
            android:paddingLeft="15dp"
            android:text="Title"
            android:textColor="@color/grey" />

        <EditText
            android:id="@+id/editTitle"
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/activity_horizontal_margin"
            android:layout_weight="1"
            android:inputType="text" >

            <requestFocus />
        </EditText>

    </TableRow>

    <View
        android:layout_height="1dip"
        android:layout_columnSpan="2"
        android:layout_gravity="left"
        android:background="#E6E6E6" />

    <TextView
        android:id="@+id/textCategory"
        android:layout_gravity="left"
        android:background="#ffffff"
        android:gravity="left"
        android:paddingLeft="15dp"
        android:text="Category"
        android:textColor="@color/grey" />

    <EditText
        android:id="@+id/editCategory"
        android:layout_width="225dp"
        android:layout_gravity="right"
        android:inputType="text" />            

    <Button
        android:id="@+id/btnCreateAccount"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="#ffffff"
        android:onClick="createExpense"
        android:text="Done"
        android:textColor="@color/red" />
</GridLayout>

答案 2 :(得分:0)

将EditText部件更改为This:

<EditText
        android:id="@+id/editTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_gravity="center_horizontal|top"
        android:layout_row="4"
        android:ems="10"
        android:inputType="text" />

答案 3 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

<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:id="@+id/gridLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:columnCount="2"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/titleTextView"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:paddingBottom="10dp"
            android:layout_row="0"
            android:paddingTop="10dp"
            android:text="dsgsdgsd"
            android:textColor="@color/red"
            android:textStyle="bold" />

        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:layout_marginLeft="20dp"
            android:layout_row="1"
            android:layout_marginRight="20dp"
            android:background="@color/red" />

        <TextView
            android:id="@+id/textTitle"
            android:layout_gravity="left"
            android:background="#ffffff"
            android:paddingLeft="15dp"
            android:layout_row="2"
            android:layout_column="0"
            android:text="Title"
            android:textColor="@color/grey" />

        <EditText
            android:id="@+id/editTitle"
            android:layout_width="225dp"
            android:layout_gravity="right"
            android:layout_row="2"
            android:layout_column="1"
            android:inputType="text">
        </EditText>

        <View
            android:layout_height="2dp"
            android:layout_columnSpan="2"
            android:layout_gravity="left"
            android:layout_row="3"
            android:background="#E6E6E6" />

        <TextView
            android:id="@+id/textCategory"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:background="#ffffff"
            android:gravity="left"
            android:layout_row="4"
            android:layout_column="0"
            android:paddingLeft="15dp"
            android:text="Category"
            android:textColor="@color/grey" />

        <EditText
            android:id="@+id/editCategory"
            android:layout_width="225dp"
            android:layout_column="1"
            android:layout_gravity="right"
            android:layout_row="4"
            android:inputType="text" />

        <Button
            android:id="@+id/btnCreateAccount"
            android:layout_width="match_parent"
            android:layout_gravity="center"
            android:background="#ffffff"
            android:layout_row="5"
            android:layout_columnSpan="2"
            android:onClick="createExpense"
            android:text="Done"
            android:textColor="@color/red" />
    </GridLayout>

</LinearLayout>

答案 4 :(得分:0)

作为一般性评论,您永远不能将wrap_contentEditText一起使用,它始终采用内容大小而不尊重任何其他边界,因此用户只需输入即可打破布局文字过多。我花了很长时间才意识到这个关于android如何优先考虑各种约束的基本观察。

在这种情况下,当GridLayout决定它不能适应其父边界内的列时,它会放弃并产生错误的结果,所以通常我们将GridLayout绑定到屏幕宽度,超出宽度的第一列将被迫离开屏幕。

如果您想要大小的输入字段来匹配数据大小,最简单的方法是定义虚拟列,其权重可用于占用屏幕空间,或跨越更大的字段。