Android Word-包装编辑文本文本

我一直试图让我的 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>
88375 次浏览

好了,我明白了,您必须在 xml 中为您的 EditText设置 android:scrollHorizontally="false"。我很确定这能行。

我想明白了,台词,

android:inputType="textCapSentences"

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

除了找到问题的根源,我还找到了解决办法。如果使用 android:inputType,则必须使用 textMultiLine 来启用多行支持。此外,使用 inputType 会取代代码 android:singleLine="false"。如果使用 inputType,那么需要重申的是,必须使用 textMultiLine,否则 EditText 对象将只包含一行,而不包装单词。

编辑: 感谢 Jacob Malliet对此提供进一步的好建议。他建议将 boolean scrollHorizonally 属性设置为 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" />
<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>

假设您首先只想要一行,然后将其展开为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,你可以定义展开它多少行。

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

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

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

此外,如果您设置高度或设置编辑文本的最大行为特定的值,它将滚动时,您输入了很多字符。

对于那些以编程方式进行操作的人,你可能想看看这个问题: Android EditText Multiline 不能像它应该的那样工作 检查你是否正确地设置了输入类型。这是我的问题

注: 步骤1-为 EditText 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-在活动中,写下代码,

在 Android 中:

myEditText.setTransformationMethod(WordBreakTransformationMethod.getInstance());

在 Kotlin:

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>

试试这个,把重力改为左上 | 对我来说很有效,还有输入类型 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" />

也设置 父布局宽度父布局宽度(Layout _ width 属性)。例如 Layout _ width = 250sp

否则,EditText 或 TextView 不会换行到下一行,直到它到达移动边界的末尾。因此,定义 Layout _ width

试试这个,它在我的编辑文本中工作。

 android:gravity="top|start"