Android Word-Wrap EditText text


Я пытался получить мой EditText box в word wrap, но не могу этого сделать.

Я имел дело с гораздо более сложными вопросами при разработке приложений для Android, и это кажется, что это должен быть прямой процесс.

однако проблема остается, и у меня есть большое текстовое поле, которое позволяет мне вводить текст только на одной строке, продолжая прямо поперек, прокручивая горизонтально при вводе текста.

вот XML-код для EditText объект из моего файла макета.

<?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>
9 58

9 ответов:

помимо поиска источника проблемы, я нашел решение. Если , то textMultiLine должны быть использованы, чтобы включить Multi-line поддержку. Кроме того, использование inputType заменяет код android:singleLine="false". Если используется inputType, то, чтобы повторить, необходимо использовать textMultiLine или объект EditText будет состоять только из одной строки без переноса слов.

Edit: спасибо Джейкоб Malliet для предоставления дальнейших хороших советов по этому вопросу. Он предложил установить логическое свойство scrollHorizontally имеет значение 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" />

Ок, я понял это, вы должны установить android:scrollHorizontally="false" для EditText в вашем xml. Я уверен, что это должно работать.

предположим, что вы просто хотите иметь одну строку сначала, а затем расширить его до 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 вы можете определить развернуть его, сколько строк.

Я понял. Линия,

android:inputType="textCapSentences"

был вопрос. Добавление этой строки в объект EditText сделает объект однострочным EditText и не позволит переносить слова или позволить пользователю нажимать "Enter", чтобы вставить ленту строк или возврат каретки в EditText.

включение всей активности в режиме прокрутки и размещение следующего текста редактирования в линейном макете работало как шарм для меня.

текст редактирования будет прокручиваться по вертикали, нажимая 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" > 

вы должны добавить в свой edittext следующий атрибут.

android:inputType="textMultiLine"

кроме того, если вы установите высоту или установите maxlines edittext в определенное значение, он будет прокручиваться при вводе большого количества символов.

для тех, кто делает это прагматично, вы можете посмотреть на этот вопрос Android EditText Multiline не работает так, как должно чтобы дважды проверить правильность установки типа ввода. Это была моя проблема

Примечание.: Шаг 1 - создать пользовательский класс для перехода на новую строку полей EditText.

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

step 2 - In Activity , write below code,

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