Текст із текстом Android Word Wrap EditText


77

Я намагався перетворити поле EditText на перенесення слів, але, здається, не можу цього зробити.

Я займався набагато складнішими проблемами під час розробки програм для 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>

Відповіді:


174

Окрім пошуку джерела проблеми, я знайшов і рішення. Якщо android:inputTypeвикористовується, тоді textMultiLine повинен використовуватися, щоб увімкнути багаторядкову підтримку. Крім того, використання inputType замінює код android:singleLine="false". Якщо використовується inputType, тоді для повторення потрібно використовувати textMultiLine, інакше об'єкт EditText складатиметься лише з одного рядка без переносу слів.

Редагувати: Дякую Джейкобу Маллієту за надану подальшу слушну пораду щодо цього. Він запропонував встановити логічне властивість scrollHorizontally до помилкових, '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

1
Для тих, хто не може змусити це рішення працювати, просто оберніть його всередині лінійного макета (як той, який загорнутий у нього), і воно повинно працювати нормально.
jrhee17,

22

Гаразд, я зрозумів, ви повинні встановити android:scrollHorizontally="false"для вашого EditTextу своєму xml. Я впевнений, що це має спрацювати.


2
п'ять різних відповідей, це єдиний, який працював у мене (крім моторошного, який я навіть не пробував)
yuttadhammo

1
Це ВІДПОВІДЬ. Немає необхідності Lines, minLines. maxLinesі android:scrollHorizontally="false", і inputTypeможе зробити це.
Youngjae

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

Ви повинні додати наступний атрибут до тексту редагування.

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

Спробуйте це, зміна сили тяжіння вгорі | ліворуч спрацювала для мене разом із введенням тексту 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.
Охад Коен,


0

Також встановіть ширину батьківського макета , (властивість Layout_width) . Наприклад layout_width = 250sp

в іншому випадку EditText або TextView не переносять на наступний рядок, поки він не досягне кінця мобільної межі. Тож визначте Layout_width


1
Батьківські засоби, LinerLayout або Tablelayout тощо
Віктор

-1

Примітка: крок 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());

У Котліні:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.