Android: вертикальное выравнивание для многострочного EditText (область текста)


232

Я хочу иметь 5 строк для высоты текстовой области. Я использую следующий код.

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:singleLine="false"
    android:lines="5"
    android:layout_marginLeft="10dip"
    android:layout_marginRight="10dip" />

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


15
попытаться убрать свой гравитационный «центр», может быть проблема
Sephy

Ответы:



99

Это похоже на CommonsWare ответ , но с небольшой подстройкой: android:gravity="top|start". Полный пример кода:

<EditText
    android:id="@+id/EditText02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:lines="5"
    android:gravity="top|start"
    android:inputType="textMultiLine"
    android:scrollHorizontally="false" 
/>

8
Не используйте, top|leftесли вы не знаете, что можете контролировать все языки в своем приложении. Существует множество языков с написанием справа налево ( en.wikipedia.org/wiki/Right-to-left ). Поддерживайте локализацию
МариусБудин

1
@MariusBudin Предположительно, top|startбудет правильной альтернативой?
запрет геоинженерии

19

Вы можете использовать этот Edittext .... Это поможет вам.

<EditText
android:id="@+id/EditText02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lines="5"
android:gravity="top|left"
android:inputType="textMultiLine" />


6
<EditText android:id="@+id/EditText02" android:layout_width="120dp"
    android:layout_height="wrap_content" android:lines="5" android:layout_centerInParent="true"
    android:gravity="top|left" android:inputType="textMultiLine"
    android:scrollHorizontally="false" android:minWidth="10.0dip"
    android:maxWidth="180dip" />

это сработает


3

Теперь дневное использование гравитации start- лучший выбор:

android:gravity="start"

Для EditText (textarea):

<EditText
    android:id="@+id/EditText02"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:lines="5"
    android:gravity="start"
    android:inputType="textMultiLine"
/>

Можете ли вы пролить свет на то, почему это работает? Я бы ожидал, что сработает startкак left(для западных языков) - то есть повлияет только на горизонтальную гравитацию, но, похоже, он тоже выполняет свою работу top.
запрет геоинженерии

Да ты прав. В основном мы используем это для поддержки RTL. Как и в арабском языке, он идет направо, а не слева. И это также перейти к тому, topчто вы уже спросили. В общем, мы начинаем писать с верхней левой стороны, поэтому это STARTтакже показывает те же характеристики. @ ban-
geoengineering

2

Я думаю, что вы можете использовать layout:weight = 5вместо этого, android:lines = 5потому что, когда вы портируете свое приложение на маленькое устройство - оно делает это хорошо .. хорошо, оба атрибута выполнят вашу работу ..

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.