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 ответов:
помимо поиска источника проблемы, я нашел решение. Если , то 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>