Wyświetlam tekst w widoku tekstowym, który wydaje się zbyt długi, aby zmieścił się na jednym ekranie. Muszę umożliwić przewijanie TextView. Jak mogę to zrobić?
Oto kod:
final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent e) {
Random r = new Random();
int i = r.nextInt(101);
if (e.getAction() == e.ACTION_DOWN) {
tv.setText(tips[i]);
tv.setBackgroundResource(R.drawable.inner);
}
return true;
}
});
setContentView(tv);
maxLines
wymaga podania dowolnej liczby; to nie jest coś, co będzie działać dla każdego rozmiaru ekranu i rozmiaru czcionki? Uważam, że łatwiej jest po prostu owinąć goScrollView
, co oznacza, że nie muszę dodawać żadnych dalszych atrybutów XML ani kodu (np. Ustawiania metody przenoszenia).ScrollView
zająć tyle miejsca, ile potrzebuje (np. Za pomocąandroid:fillViewport
atrybutu), lub ustaw odpowiedni rozmiar. UżywaniemaxLines
nie powinno być używane do ustawiania rozmiarów elementów interfejsu użytkownika, więc to nie jest rozwiązanie.Oto jak to zrobiłem wyłącznie w języku XML:
UWAGI:
android:fillViewport="true"
w połączeniu zandroid:layout_weight="1.0"
spowoduje, że widok tekstu zajmie całą dostępną przestrzeń.Podczas definiowania widoku przewijania NIE określaj
android:layout_height="fill_parent"
inaczej, widok przewijania nie działa! (to spowodowało, że zmarnowałem godzinę teraz! FFS).WSKAZÓWKA PRO:
Aby programowo przewinąć do dołu po dołączeniu tekstu, użyj tego:
źródło
mTextView.getBottom()
, wystarczy użyć metody,mScrollView.fullScroll(View.FOCUS_DOWN)
ponieważ jest ona częścią interfejsu ScrollView API. Zobacz tutaj i tutaj, aby uzyskać więcej informacji.LinearLayout
lubScrollView
mogą być bezużyteczne w tym przykładzie (LinearLayout
całkowicie usunąłem ). Ostrzega również, że w przypadkuTextView
, powinno byćandroid:layout_height="wrap_content"
dopasowanie doScrollView
. Te ostrzeżenia mogą wynikać z 3 lat, które upłynęły od opublikowania tej odpowiedzi. Niezależnie od tego, ta odpowiedź obsługuje płynne przewijanie i przesuwanie ... + 1<!--suppress AndroidLintUselessParent -->
powyżejScrollView
w pliku xml zajmie się tymi ostrzeżeniami.Wszystko, co jest naprawdę konieczne, to setMovementMethod (). Oto przykład z wykorzystaniem LinearLayout.
Plik main.xml
Plik WordExtractTest.java
źródło
ScrollView
metody.StringBuilder
zamiastString
... to, co masz, jest trochę marnotrawstwem.Dodaj do tego widok tekstowy
źródło
Nie trzeba go wkładać
Możesz wykonać swoją pracę, po prostu dodając:
I umieść ten kod w swojej klasie Java:
źródło
Możesz albo
TextView
przezScrollView
; lubScrollingMovementMethod.getInstance();
.źródło
Najlepszy sposób, jaki znalazłem:
Zamień TextView na EditText z następującymi dodatkowymi atrybutami:
Nie ma potrzeby owijania w ScrollView.
źródło
ScrollView
jest właściwą drogą.Prosty. Oto jak to zrobiłem:
Strona XML:
Strona Java:
Premia:
Aby widok tekstu przewijał się w dół, gdy wypełnia go tekst, musisz dodać:
do pliku XML TextView. Przewinie się automatycznie w dół, gdy pojawi się więcej tekstu.
Oczywiście musisz dodać tekst za pomocą funkcji append zamiast ustawiać tekst:
Użyłem go do celów dziennika.
Mam nadzieję, że to pomoże ;)
źródło
To jest „Jak zastosować ScrollBar do TextView”, używając tylko XML.
Najpierw musisz przejąć kontrolę Textview w pliku main.xml i napisać w nim trochę tekstu ... w ten sposób:
Następnie umieść kontrolkę widoku tekstu pomiędzy widokiem przewijania, aby wyświetlić pasek przewijania tego tekstu:
Otóż to...
źródło
Zapewni to płynne przewijanie tekstu z paskiem przewijania.
źródło
Powyższa „profesjonalna wskazówka” z Someone Somewhere ( zmienianie przewijania TextView na Androida ) działa jednak świetnie, co jeśli dynamicznie dodajesz tekst do ScrollView i chciałbyś automatycznie przewijać do dołu po dołączeniu tylko wtedy, gdy użytkownik jest w spód ScrollView? (Być może dlatego, że jeśli użytkownik przewinął w górę, aby przeczytać coś, czego nie chcesz automatycznie resetować do dołu podczas dołączania, co byłoby denerwujące).
W każdym razie tutaj jest:
Funkcja mTextStatus.getLineHeight () sprawi, że nie będziesz przewijaćToBottom (), jeśli użytkownik znajduje się w obrębie jednej linii od końca ScrollView.
źródło
Jeśli chcesz przewinąć tekst w widoku tekstu, możesz wykonać następujące czynności:
Najpierw należy podklasę podglądu tekstu.
A potem użyj tego.
Poniżej znajduje się przykład widoku tekstu z podklasą.
Teraz musisz użyć tego w XML w następujący sposób:
Otóż to.
źródło
Dodaj następujące w widoku tekstu w XML.
I na koniec dodaj
w pliku Java.
źródło
Nie znalazłem przewijania TextView do obsługi gestu „fling”, w którym przewija się on po przesunięciu w górę lub w dół. Skończyło się na tym, że sam to wdrożyłem, ponieważ nie chciałem używać ScrollView z różnych powodów, i nie było żadnej metody MovementMethod, która pozwalała mi wybierać tekst i klikać linki.
źródło
W kotlin za przewijanie widoku tekstu
a także dodać w xml tę właściwość
źródło
Gdy skończysz przewijanie, dodaj tę linię do ostatniej linii widoku, gdy wprowadzisz cokolwiek w widoku:
źródło
Jeśli nie chcesz używać rozwiązania EditText, możesz mieć więcej szczęścia z:
źródło
Dodaj to do swojego układu XML:
W kodzie musisz wpisać następujące wiersze:
źródło
Poniższy kod tworzy automatyczne przewijanie tekstu w poziomie:
Podczas dodawania TextView do xml użyj
Ustaw następujące właściwości TextView w funkcji onCreate ()
źródło
możesz teraz przewinąć.
źródło
Użyj tego w ten sposób
źródło
W moim przypadku Ograniczenie układu. AS 2.3.
Implementacja kodu:
XML:
źródło
Walczyłem z tym przez ponad tydzień i w końcu wymyśliłem, jak to zrobić!
Mój problem polegał na tym, że wszystko przewijało się jako „blok”. Sam tekst przewijał się, ale jako fragment, a nie linia po linii. To oczywiście nie działało dla mnie, ponieważ odcinałoby linie na dole. Wszystkie poprzednie rozwiązania nie działały dla mnie, więc stworzyłem własne.
Oto najprostsze jak dotąd rozwiązanie:
Utwórz plik klasy o nazwie: „PerfectScrollableTextView” w pakiecie, a następnie skopiuj i wklej ten kod w:
Na koniec zmień swój „TextView” w XML:
Od:
<TextView
Do:
<com.your_app_goes_here.PerfectScrollableTextView
źródło
Put
maxLines
ascrollbars
wewnątrz TextView w xml.Następnie w kodzie Java.
textView.setMovementMethod(new ScrollingMovementMethod());
źródło
Miałem ten problem, gdy korzystałem z
TextView
wewnątrzScrollView
. To rozwiązanie zadziałało dla mnie.źródło
ilekroć potrzebujesz użyć ScrollView jako elementu nadrzędnego , a także używasz metody przewijania w TextView.
A kiedy portretujesz, aby ustawić urządzenie w orientacji poziomej, czas pojawia się jakiś problem . (jak) cała strona jest przewijalna, ale metoda przewijania nie działa.
jeśli nadal musisz używać ScrollView jako metody nadrzędnej lub przewijania, użyj również poniższego opisu.
Jeśli nie masz żadnych problemów, użyj EditText zamiast TextView
patrz poniżej:
Tutaj EditText zachowuje się jak TextView
Twój problem zostanie rozwiązany
źródło
XML - możesz użyć
android:scrollHorizontally
atrybutuOkreśla, czy tekst może być szerszy niż widok (i dlatego może być przewijany w poziomie).
Może być wartością logiczną, taką jak „prawda” lub „fałsz”.
Prigramacaly -
setHorizontallyScrolling(boolean)
źródło
Spróbuj tego:
źródło