81

我一直试图让我的 EditText 框自动换行,但似乎做不到。

在开发 Android 应用程序时,我处理过更复杂的问题,这似乎应该是一个简单的过程。

但是,问题仍然存在,我有一个大文本框,它只允许我在一行上输入文本,继续直行,在我输入文本时水平滚动。

这是我的布局文件中 EditText 对象的 XML 代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/myWidget48"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
 <ScrollView
    android:id="@+id/myScrollView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    >
    <LinearLayout
        android:id="@+id/widget37"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
    >

<EditText
        android:id="@+id/txtNotes"
        android:layout_width="300px"
        android:layout_height="120px"
        android:scrollbars="vertical"
        android:textSize="18sp"
        android:gravity="left"
        android:layout_marginTop="10dip"
        android:inputType="textCapSentences"
        >
    </EditText>
</LinearLayout>
</ScrollView>
</LinearLayout>
4

12 回答 12

183

除了找到问题的根源之外,我还找到了解决方案。如果android:inputType使用,则必须使用 textMultiLine 来启用多行支持。此外,使用 inputType 取代了代码android:singleLine="false"。如果使用 inputType,那么重申一下,必须使用 textMultiLine,否则 EditText 对象将只包含一行,没有自动换行。

编辑:感谢Jacob Malliet 对此提供了进一步的好建议。他建议将 boolean scrollHorizo​​ntally 属性设置为 false, 'android:scrollHorizontally="false"'

示例 XML 代码:

<EditText
    android:id ="@+id/edtInput"
    android:layout_width ="0dip" 
    android:layout_height ="wrap_content" 
    android:layout_weight ="1" 
    android:inputType="textCapSentences|textMultiLine"
    android:maxLines ="4" 
    android:maxLength ="2000" 
    android:hint ="@string/compose_hint"
    android:scrollHorizontally="false" />
于 2010-07-20T03:56:19.417 回答
24

好的,我想通了,你必须在你的 xml 中设置android:scrollHorizontally="false"你的。EditText我很确定这应该可行。

于 2010-07-18T17:10:02.987 回答
19

假设您一开始只想拥有一行,然后将其扩展为 5 行,并且您希望最多拥有 10 行。

<EditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:id="@+id/etMessageBox"
   android:layout_alignParentLeft="true"
   android:layout_centerVertical="true"
   android:autoLink="all"
   android:hint="@string/message_edit_text_hint"
   android:lines="5"
   android:minLines="1"
   android:gravity="top|left"
   android:maxLines="10"
   android:scrollbars="none"
   android:inputType="textMultiLine|textCapSentences"/>

通过增加android:lines,您可以定义扩展它的行数。

于 2013-05-21T05:05:42.073 回答
17

您必须将以下属性添加到您的编辑文本中。

android:inputType="textMultiLine"

此外,如果您设置高度或将 edittext 的 maxlines 设置为特定值,则当您输入很多字符时它会滚动。

于 2017-07-03T10:40:05.137 回答
10

我想到了。线,

android:inputType="textCapSentences"

是问题所在。将此行添加到 EditText 对象将使该对象成为单行 EditText,并且不会让单词换行,或者允许用户按“Enter”在 EditText 中插入换行符或回车符。

于 2010-07-19T18:46:12.407 回答
6

将整个活动封闭在滚动视图中,并以线性布局放置以下编辑文本,这对我来说就像一个魅力。

编辑文本会按回车垂直滚动,代码如下

<EditText
    android:id="@+id/editText1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:ems="10"
    android:hint="Enter somehting"
    android:inputType="textMultiLine"
    android:maxLength="2000"
    android:maxLines="6"
    android:scrollHorizontally="false"
    android:scrollbars="vertical" > 
于 2013-11-30T10:19:49.307 回答
2

试试这个,将重力更改为 top|left 对我有用,以及输入类型 textmultiline

<EditText
    android:layout_width="200dp"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@color/color_red"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:gravity="top|left"
    android:inputType="textMultiLine|textCapSentences"
    android:lines="10"
    android:maxWidth="200dp"
    android:maxLength="200"
    android:maxLines="10"
    android:singleLine="false"
    android:textColor="@android:color/white"
    android:textSize="26sp" />
于 2019-07-01T12:31:48.373 回答
1

对于那些以编程方式执行此操作的人,您可能想查看这个问题Android EditText Multiline does not work as it should double check you are setting the input type correct. 那是我的问题

于 2018-06-02T18:13:19.083 回答
0

还要设置父布局宽度(Layout_width 属性)。例如layout_width=250sp

否则,EditText 或 TextView 不会换行到下一行,直到它到达移动边框的末尾。所以定义 Layout_width

于 2019-08-08T02:35:49.387 回答
0

试试这个。它适用于我的编辑文本。

 android:gravity="top|start"
于 2022-02-08T01:57:09.097 回答
-1

EditText注意:第 1 步 - 为wordWrap创建一个自定义类。

Android没有这个属性。但是您可以使用 ReplacementTransformationMethod 替换所有中断字符。

public class WordBreakTransformationMethod extends ReplacementTransformationMethod
{
    private static WordBreakTransformationMethod instance;
    private WordBreakTransformationMethod() {}

    public static WordBreakTransformationMethod getInstance()
    {
        if (instance == null)
        {
            instance = new WordBreakTransformationMethod();
        }
        return instance;
    }

    private static char[] dash = new char[] {'-', '\u2011'};
    private static char[] space = new char[] {' ', '\u00A0'};

    private static char[] original = new char[] {dash[0], space[0]};
    private static char[] replacement = new char[] {dash[1], space[1]};

    @Override
    protected char[] getOriginal()
    {
        return original;
    }

    @Override
    protected char[] getReplacement()
    {
        return replacement;
    }
}

第 2 步 - 在 Activity 中,编写以下代码,

在安卓中:

myEditText.setTransformationMethod(WordBreakTransformationMethod.getInstance());

在科特林:

myEditText.setTransformationMethod= WordBreakTransformationMethod.getInstance

在 XML 中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <EditText
        android:id="@+id/myEditText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="textCapSentences|textMultiLine"
        android:scrollHorizontally="false" />
</LinearLayout>
于 2018-06-09T05:14:33.453 回答
-6
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/table"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1"
    >  
     <TableRow
        android:id="@+id/newRow">
        <LinearLayout
             android:layout_width="fill_parent"
             android:orientation="vertical"
             android:layout_height="wrap_content"
             android:gravity="left"
             android:paddingBottom="10dip">
            <TextView  
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content" 
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="Some Text"
            />
        </LinearLayout>
        </TableRow>

        <View
        android:layout_height="2dip"
        android:background="#FF909090" />

    <TableRow>
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="10dip">

    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"         
        android:text="Some Text"
        android:paddingBottom="5dip"
        />     
    <EditText 
        android:id="@+id/editbox"  
        android:layout_width="wrap_content" 
        android:layout_height="150px"
        android:gravity="top"   
        android:inputType="textFilter"
        android:scrollHorizontally="false"      
        />  

</RelativeLayout>
</TableRow>
<TableRow>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button 
        android:id="@+id/btnone"  
        android:layout_width="3dip" 
        android:layout_height="wrap_content"
        android:layout_margin="2dip"
        android:layout_weight="1"
        android:text="Btn"
        />          
    <Button 
        android:id="@+id/btntwo"  
        android:layout_width="3dip" 
        android:layout_height="wrap_content"
        android:layout_margin="2dip"
        android:layout_weight="1"
        android:text="Btn"
        />    
 </LinearLayout>
 </TableRow>
 </TableLayout>
于 2011-03-07T17:02:10.830 回答