Android Word Wrap编辑文本

Android Word Wrap编辑文本,android,xml,android-edittext,word,word-wrap,Android,Xml,Android Edittext,Word,Word Wrap,我一直在尝试让我的编辑文本框自动换行,但似乎做不到 我在开发Android应用程序时处理过更复杂的问题,这似乎应该是一个简单的过程 然而,问题仍然存在,我有一个大的文本框,它只允许我在一行上输入文本,在输入文本时继续笔直滚动 下面是布局文件中EditText对象的XML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/myWidget48" android:layou

我一直在尝试让我的编辑文本框自动换行,但似乎做不到

我在开发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>


好的,我想好了,您必须在xml中为您的
编辑文本设置
android:scrollHorizontal=“false”
。我很确定这应该行得通。

我想出来了。那条线,

android:inputType="textCapSentences"

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

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

编辑:感谢雅各布·马利特在这方面提供了进一步的好建议。他建议将boolean ScrollHorizontal属性设置为false,
'android:scrollHorizontal=“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" />


假设您首先只需要一行,然后将其扩展到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
可以定义扩展多少行

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

编辑文本将按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" > 

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

android:inputType="textMultiLine"

另外,如果您将edittext的高度或最大行数设置为特定值,则当您键入多个字符时,它将滚动。

对于那些以编程方式执行此操作的人,您可能需要查看此问题,以再次检查您是否正确设置了输入类型。这是我的问题

注意: 步骤1-为
EditText
wordWrap创建自定义类

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

公共类WordBreakTransformationMethod扩展了ReplacementTransformationMethod
{
私有静态WordBreakTransformationMethod实例;
私有WordBreakTransformationMethod(){}
公共静态WordBreakTransformationMethod getInstance()
{
if(实例==null)
{
实例=新的WordBreakTransformationMethod();
}
返回实例;
}
私有静态字符[]破折号=新字符[]{'-','\u2011'};
私有静态字符[]空间=新字符[]{'','\u00A0'};
私有静态字符[]原始=新字符[]{dash[0],空格[0]};
私有静态字符[]替换=新字符[]{dash[1],空格[1]};
@凌驾
受保护的字符[]getOriginal()
{
归还原件;
}
@凌驾
受保护的字符[]getReplacement()
{
退换货;
}
}
第2步-在活动中,编写以下代码

在Android中:

myEditText.setTransformationMethod(WordBreakTransformationMethod.getInstance());
在科特林:

myEditText.setTransformationMethod=WordBreakTransformationMethod.getInstance
在Xml中:


试试这个,将重力改为顶部|左侧对我来说很有效,同时输入类型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" />

还设置父布局宽度(布局宽度属性)。例如布局\u宽度=250sp


否则,EditText或TextView在到达移动边框的末尾之前不会换行到下一行。因此,定义布局宽度

五个不同的答案,这是唯一一个对我有效的答案(除了那张可怕的桌子,我甚至没有尝试过),这是答案。无需
maxLines
android:ScrollHorizontal=“false”
inputType
都可以。我错过的是android:layout\u width=“0dp”为什么要使用
android:layout\u width=“0dip”
?正如我所想,它对我来说是不可见的。@Error404//它将被
layout\u weight=“1”
属性覆盖。因此,它可能被放置在
LinearLayout
中。对于那些无法使用此解决方案的人,只需将其包装在LinearLayout中(如包装在其中的一个OP),就可以了。请提供此答案的一些详细信息。那么,只需使用
android:inputType=“textcap句子| textMultiLine”
。然后您的EditText字段将以大写开头,并且将是多行的。这对我有用!现在我看到你已经在上面的一个单独的答案中说明了这一点……
“输入something”
:D但谁在乎呢;)#TypoParent表示,LinerLayout或Tablelayout等用于rtl支持,请使用
top | start
而不是
top | left
<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" />