Android: Wyrównanie w pionie dla wielowierszowego EditText (obszar tekstowy)

232

Chcę mieć 5 linii na wysokość pola tekstowego. Korzystam z następującego kodu.

<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" />

Obszar tekstowy wygląda dobrze, ale problem polega na tym, że kursor miga na środku pola tekstowego. Chcę, aby migało w pierwszej linii, przy pierwszym znaku w polu tekstowym.

d-man
źródło
15
spróbuj usunąć swoje „centrum” grawitacji, może to być problem
Sephy

Odpowiedzi:

370

Posługiwać się android:gravity="top"

CommonsWare
źródło
99

Jest to podobne do CommonsWare odpowiedź, ale z niewielkim uszczypnąć: android:gravity="top|start". Kompletny przykład kodu:

<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" 
/>
Nandagopal T.
źródło
8
Nie używaj, top|leftchyba że wiesz, że możesz kontrolować wszystkie języki w swojej aplikacji, istnieje wiele języków od prawej do lewej ( en.wikipedia.org/wiki/Right-to-left ). Zachowaj łatwość lokalizacji
MariusBudin
1
@MariusBudin Prawdopodobnie top|startbyłaby właściwa alternatywa?
zakaz geoinżynierii
19

Możesz użyć tego tekstu edycji .... Pomoże ci to.

<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" />
Denny Sharma
źródło
9

Użyj tego:

android:gravity="top"

lub

android:gravity="top|left"
Samir Mangroliya
źródło
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" />

to będzie działać

Asad Rao
źródło
3

Teraz startnajlepszym wyborem jest grawitacja :

android:gravity="start"

W przypadku 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"
/>
Hasib Akter
źródło
Czy możesz rzucić nieco światła na to, dlaczego to działa? Oczekiwałbym, że będę startdziałał jak left(w przypadku języków zachodnich) - tj. Wpłynie tylko na poziomą grawitację, ale wydaje się, że również spełnia swoje zadanie top.
zakaz geoinżynierii
Tak masz rację. Używamy tego głównie do obsługi RTL. Podobnie jak w języku arabskim, idzie w prawo zamiast w lewo. I chodzi również o topto, o co już prosiłeś. Ogólnie rzecz biorąc, zaczynamy pisać od lewej strony u góry, dlatego STARTteż wykazują one te same cechy. @ ban-
geoengineering
2

Myślę, że możesz użyć layout:weight = 5zamiast tego, android:lines = 5ponieważ po przeniesieniu aplikacji na mniejsze urządzenie - robi to ładnie ... oba atrybuty spełnią twoje zadanie ...

Sanjay Herle
źródło