Czy ktoś wie, jak zawijać tekst w TextView na platformie Android. tzn. jeśli tekst w widoku tekstowym przekracza długość ekranu, powinien zostać wyświetlony w drugiej linii.
Szukałem i próbowałem następujących rzeczy:
android:scrollHorizontally="false",
android:inputType="textMultiLine",
android:singleLine="false"
Ale nic nie działa ...
Czy ktoś może zasugerować, jak mogę to zrobić.
android:inputType="textPersonName"
. Najwyraźniej został dodany przez narzędzie projektowe Android Studio. Usunięcie tego atrybutu rozwiązało problem! Mogą istnieć inne typy danych wejściowych, które również uniemożliwiają zawijanie.Odpowiedzi:
U mnie ten problem wystąpił tylko na Androidzie <4.0
Kombinacja parametrów, które zastosowałem to:
android:layout_weight="1" android:ellipsize="none" android:maxLines="100" android:scrollHorizontally="false"
Liczba maxLines wydawała się być losowym ostatnim elementem, który spowodował zawijanie mojego TextView.
źródło
match_parent
, co nie jest tym samym, co zwiększenie wysokości TextView w celu uwzględnienia dodatkowych wierszy.Układ wiązań
<TextView android:id="@+id/some_textview" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintLeft_toLeftOf="@id/textview_above" app:layout_constraintRight_toLeftOf="@id/button_to_right"/>
android:maxLines="2"
aby zapobiec rozszerzaniu w pionie (2 to tylko np.)android:ellipsize="end"
Szerokość 0dp pozwala na ograniczenie lewej / prawej strony do określenia szerokości twojego widżetu.
Ustawienie ograniczeń lewo / prawo ustawia rzeczywistą szerokość widżetu, w którym będzie zawijany tekst.
Dokumentacja układu ograniczeń
źródło
W przypadku, gdy
TextView
znajduje się wewnątrz aTableLayout
, rozwiązaniem jest ustawienieandroid:shrinkColumns="1"
naTableLayout
. (Zastąp1
numerem kolumny, w której znajduje się TextView, w którym chcesz zawinąć. (Indeksowane 0))AFAICT, żadne inne atrybuty nie są potrzebne w
TextView
.W innych przypadkach zobacz inne odpowiedzi tutaj.
FWIW, początkowo miałem z tym coś w rodzaju pracy
<TextView android:id="@+id/inventory_text" android:layout_width="fill_parent" android:layout_weight="1" android:width="0dp"
ale to spowodowało dodatkowe puste miejsce na dole Dialogu, w którym było wszystko.
źródło
Musisz użyć 2 parametrów:
android:ellipsize="none"
: tekst nie jest cięty na szerokości widoku tekstuandroid:scrollHorizontally="false"
tekst zawija się na tyle wierszy, ile potrzebaźródło
Ma trzy stałe wartości
<android.support.v7.widget.AppCompatTextView android:id="@+id/textquestion" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:scrollHorizontally="false" android:text="Your Question Display Hear....Your Question Display Hear....Your Question Display Hear....Your Question Display Hear...." android:textColor="@android:color/black" android:textSize="20sp" android:textStyle="bold" app:breakStrategy="simple" />
yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);
Więcej informacji znajdziesz w BreakStrategy
źródło
To powinno rozwiązać problem:
android:layout_weight="1"
.źródło
match_parent
. Niezupełnie to samo, czego chciał OP.layout_weight="1"
naprawiono problem za mnie. Jednak moja TableRow, która zawiera TextView, zostałalayout_height
ustawiona na określoną wartość. Może komuś się przydaOK, prawda jest gdzieś pośrodku, bo trzeba spojrzeć na sprawę z punktu widzenia rodzica i dziecka. Poniższe rozwiązanie działa TYLKO gdy tryb spinner =
dialog
niezależnie od wersji Androida (nie ma problemu .. testowałem to w VD i DesireS z Androidem => 2.2):. Ustaw tryb przędzarki (rodzica) na przykład:
android:spinnerMode="dialog"
Ustaw właściwości widoku tekstu (niestandardowy widok podrzędny) na:
android:layout_weight="1" android:ellipsize="none" android:maxLines="100" android:scrollHorizontally="false"
Mam nadzieję, że to działa również dla Ciebie.
źródło
Ustawienie
android:maxEms
danej wartości razem zandroid:layout_weight="1"
spowoduje zawijanie TextView po osiągnięciu określonej długości ems.źródło
W Android Studio 2.2.3 pod
inputType
właściwością znajduje się właściwość o nazwietextMultiLine
. Wybranie tej opcji rozwiązało u mnie podobny problem. Mam nadzieję że to pomogło.źródło
Właśnie pracowałem nad TextView wewnątrz układu w RecyclerView. Miałem tekst coraz odcięty, EX, dla
Read this message
ujrzałem:Read this
. Próbowałem ustawićandroid:maxLines="2"
w TextView, ale nic się nie zmieniło. Jednakandroid:lines="2"
zaowocował wRead this
pierwszej linii imessage
na drugiej.źródło
Miałem ten sam problem. Po zmianie to zadziałało -
android:layout_width="wrap_content"
Wielokropek, maxLines lub layout_weight - wszystko to nie robiło różnicy. Uwaga - szerokość elementu nadrzędnego jest również ustawiana jako wrap_content.
źródło
Wszystko, co musisz zrobić, to ustawić szerokość widoku tekstu .
android: layout_width = "60dp"
możesz zmienić szerokość według własnego wyboru. Po prostu wpisz długie zdanie, aby sprawdzić, czy działa w ten sposób
android: text = "Chcę być wśród światowej klasy inżynierów oprogramowania"
źródło
Wypróbuj podejście @ Guykun
android:layout_weight="1" android:ellipsize="none" android:maxLines="100" android:scrollHorizontally="false"
Upewnij się również, że szerokość nadrzędna nie jest ustawiona na zawijanie zawartości. To jest to, czego mi brakowało.
źródło
Używam Androida 2.2 i mój widok tekstu automatycznie przejdzie do następnej linii, jeśli przekroczy ekran.
Jeśli chcesz, aby tekst znalazł się w następnej linii przed końcem ekranu, po prostu dodaj (po prostu wpisz własną wartość dp). Będzie to przydatne, jeśli masz zdjęcie po prawej stronie tekstu.
android:layout_marginRight="52dp"
źródło
Dziwne - stworzyłem TextView w kodzie i zawinął - mimo że nie ustawiłem niczego poza standardowymi rzeczami - ale przekonaj się sam:
LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); childParams.setMargins(5, 5, 5, 5); Label label = new Label(this); label.setText("This is a testing label This is a testing label This is a testing label This is a testing labelThis is a testing label This is a testing label"); label.setLayoutParams(childParams);
Jak widać z definicji parametrów, używam LinearLayout. Klasa Label po prostu rozszerza TextView - nie robi nic poza ustawieniem rozmiaru i koloru czcionki.
Podczas uruchamiania go w emulatorze (poziom API 9) automatycznie zawija tekst w 3 liniach.
źródło
LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
. Najprawdopodobniej oznacza to opakowanie, które uważasz za „automagiczne”Po prostu ustaw określony
layout_with
rozmiar, gdy tekst wypełni maksymalną szerokość, przepełni się do następnej linii, powodując efekt zawijania.<TextView android:id="@+id/segmentText" android:layout_marginTop="10dp" android:layout_below="@+id/segmentHeader" android:text="You have the option to record in one go or segments(if you swap options you will loose your current recordings)" android:layout_width="300dp" android:layout_height="wrap_content"/>
źródło
Sztuczka polega na szerokości textView, spróbuj nadać mu dedykowaną liczbę, taką jak:
<TextView android:layout_width="300dp" android:layout_height="wrap_content"/>
Próbowałem wielu rozwiązań bez rezultatu, próbowałem:
android:ellipsize="none" android:scrollHorizontally="false"
jedyną rzeczą, która wyzwoliła opcję zawijania, jest dedykowana szerokość
źródło
Musisz dodać swój TextView w ScrollView za pomocą czegoś takiego:
<ScrollView android:id="@+id/SCROLL_VIEW" android:layout_height="150px" android:layout_width="fill_parent"> <TextView android:id="@+id/TEXT_VIEW" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" /> </ScrollView>
źródło