Android自动换行EditText文本


77

我一直在尝试使我的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>

Answers:


174

除了找到问题的根源,我还找到了解决方案。如果android:inputType使用,则必须使用textMultiLine启用多行支持。同样,使用inputType代替code 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" />

1
我错过的是android:layout_width =“ 0dp”
挤压

3
你为什么用android:layout_width ="0dip"?如我所料,它对我来说是看不见的。
弗朗西斯科·罗梅罗

@ Error404 //将被layout_weight="1"属性覆盖。因此它可能放在中LinearLayout
Youngjae 2015年

1
对于那些无法使用此解决方案的人,只需将其包装在linearlayout内(就像一个OP包裹在其中),它应该可以正常工作。
jrhee17 '16

22

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


2
五个不同的答案,这是唯一对我
有用的

1
这就是答案。没有必要LinesminLinesmaxLinesandroid:scrollHorizontally="false",并且inputType可以做到。
Youngjae 2015年

18

假设您刚开始只想拥有一行,然后将其扩展为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您可以定义展开它的行数。


15

您必须将以下属性添加到您的edittext中。

android:inputType="textMultiLine"

同样,如果您设置高度或将edittext的最大行数设置为特定值,则在键入很多字符时它将滚动。


10

我想到了。线,

android:inputType="textCapSentences"

是问题。将此行添加到EditText对象将使该对象成为一行EditText,并且不会让文字自动换行,也不会允许用户按Enter键在EditText中插入换行符或回车符。


2
好吧,那就用吧android:inputType="textCapSentences|textMultiLine"。然后,您的EditText字段将以大写字母开头,并且将是多行。这个对我有用!现在我看到您无论如何都将其放在单独的答案中……
snark

6

将整个活动包含在滚动视图中,并以线性布局放置以下编辑文本,这对我来说很有吸引力。

编辑文本将按Enter垂直滚动,代码如下

<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" > 

"Enter somehting":D但谁在乎;)#Typo
fWd82

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" />

1
请使用top|start代替top|left,以获得rtl支持。
Ohad Cohen


0

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

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


1
父级方式,LinerLayout或Tablelayout等
维克多

-1

注意:步骤1-为EditTextwordWrap创建一个自定义类。

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步-在“活动”中,编写以下代码,

在Android中:

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>

-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>

3
请提供此答案的一些详细信息
Mauricio Gracia Gutierrez 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.