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 ) Тримайте його локалізацію людей
MariusBudin

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 (текстова область):

<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
Hasib Akter

2

Я думаю , що ви можете використовувати layout:weight = 5замість цього , android:lines = 5тому що , коли ви переносите ваше додаток меншого пристрою - він робить це добре .. добре, обидва атрибута буде виконувати свою роботу ..

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