当用户输入时,我该如何防止EditText自动调整大小?

50

我有一个EditText和一个Button在同一行上并排放置。看起来很好,但是当用户输入大量文本时,EditText会被重新调整大小,导致Button被挤压。

我将EditTextButton都设置为layout_width="wrap_content""fill_parent"会破坏布局,而且我不想使用绝对尺寸-现在的样式在横屏和竖屏模式下都很好看,我只是不希望EditText改变大小。

我的布局:

<TableLayout
    android:id="@+id/homelayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TableRow>
        <TextView
            android:id="@+id/labelartist"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Find artists:" />
    </TableRow>
    <TableRow>
        <EditText
            android:id="@+id/entryartist"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="6"
            android:background="@android:drawable/editbox_background"
            android:editable="true"
            android:padding="5px"
            android:singleLine="true" />
        <Button
            android:id="@+id/okartist"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginLeft="10dip"
            android:layout_weight="1"
            android:text="Search" />
    </TableRow>

</TableLayout>
10个回答

89

对于EditText,请使用

android:layout_width="0dp" - not required but preferred.
android:layout_weight="1"

对于按钮,不要指定android:layout_weight属性。


谢谢 - 这解决了问题!“0dp”表示宽度的意思是什么?是指它应该占用所有可用空间吗? - alex_c
1
不要忘记在您的TableLayout中删除(如果存在)android:stretchColumns="x",其中“x”是包含您不想自动调整大小的EditText的列位置。 - Caumons
按钮的权重不会改变任何东西,但是宽度为0dp会有影响。谢谢。 - Lena Bru
最后我有一个实时的例子,说明为什么我们应该使用0dp而不是wrap content。 - A.s. Bhullar

14

我所做的是在活动(Activity)的onCreate方法中先测量EditText,然后应用其最大宽度。

您可以使用类似以下代码的方式实现:

EditText someedittext = (EditText)findViewById(R.id.sometextview);
someedittext.setMaxWidth(someedittext.getWidth());

5

EditText设置一个maxWidth属性,这样它就不会超出你提供的宽度进行调整。同时,如果你想让它仅在一行内显示,也需要将maxLines属性设置为1。


3
谢谢 - 我其实不想硬编码一个特定的最大宽度,因为对于不同的方向或屏幕尺寸来说,它并不相同。 - alex_c

3

enter image description here

您需要添加 android:imeOptions 以防止此行为发生。


2

只需使用:

android:layout_width="fill_parent"

对于EditText和Button都适用。虽然在EditText上设置也可以,但最好两者都设置。


1

您可以像上面显示的那样定义EditText的大小

android:minWidth="80dp"
android:maxWidth="80dp"

或者

android:layout_width="60dp"

或者

您可以应用任意大小的背景图片,但不要忘记使用wrap_content定义其高度和宽度。

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

0

正确的做法是将android:minWidth和android:maxWidth设置为所需的宽度。这样,您就不必调整布局以使用android:layout_weight。

例如,如果您希望EditText始终为80个密度像素,无论输入多少字符,请使用以下内容:

android:minWidth="80dp"
android:maxWidth="80dp"

0
我有完全相同的查询。但是在线性布局中,我有一个EditText和一个Button相邻。 我尝试使用android:layout_weight="1"来设置EditText的权重 android:layout_width="0dp" 它完美地奏效了! 非常感谢!

0

我曾经遇到过类似的问题,但是我无法让上述方法起作用。我的解决方法是从EditText框中获取文本,然后将其格式化为屏幕最大可处理的大小。当我将其保存到数据库时,我会将其保存为显示文本和原始文本。

如果您前往此页面,我在那里提供了更详细的说明。


0
选定的解决方案可行,但让我补充一点:
如果您使用 android:layout_weight="0.15" (值不重要)
那么
如果 LinearLayout 是水平的,则使用 android:layout_width="0dp"
或者
如果 LinearLayout 是垂直的,则使用 android:layout_height="0dp"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接