2013-06-15 13 views
21

Zauważyłem, że android:singleLine="true", jeśli jest używany w widoku Text Listitem w ListView, powoduje przewijanie bardzo laggy. Chociaż znalazłem alternatywę: android:maxLines="1", jestem bardzo ciekawy, dlaczego android:singleLine="true" powoduje, że przewijanie jest bardzo opóźnione, a nawet jeśli jest opóźnione, dlaczego Android nadal używa tego?Dlaczego android: singleLine = "true" powoduje, że ListView przewija się bardzo lagged?

+2

+1 za bardzo interesujące pytanie – verybadalloc

+0

To interesujące, chcę zobaczyć to później. – Milan

Odpowiedz

24

Wygląda na to, że te 2 funkcje faktycznie nie dają dokładnie takich samych wyników.

Według interesującego tematu utworzonego na this blog przez Radley Marksa singleLine jest najczęściej przestarzałe teraz, ale nadal może być przydatna w niektórych przypadkach, ponieważ nie weźmie pod uwagę powrotu karetki i zebrać maksymalną ilość tekstu w jednej linii:

Największą zaletą jest to, że pojedynczy wiersz zignorowałby powrót karetki (\ n) i umieściłby cały tekst w jednym wierszu, czasem nawet ściskając tekst. MaxLines nie przejmuje się.

Wreszcie podsumowuje:

Chociaż SingleLine jest przestarzała, to wciąż w ciężkim zastosowania w starszych aplikacjach na Androida starych telefonów z systemem Android, więc to naprawdę nie odchodzi. Został jednak od dawna porzucony i ma tendencje do łamania się w nieoczekiwany sposób. Użyj maxLines kiedy tylko możesz i singleLine tylko wtedy, gdy musisz.

Następnie sprawdzając dokumentację Android o obu metod: singleLine i maxLines, można zobaczyć, że pierwszy z nich jest obsługiwany przez tekstu TransformationMethod To wyjaśniałoby, dlaczego myślę, że to jest o wiele wolniej niż drugi.

+6

Dlaczego ellipsize = "end" nie działa dla jakiegoś tekstu, aby go skrócić (nie dodaje ... do końca zdania) podczas korzystania z maxLines minLines, ale działa dobrze, gdy użyłem singleLine? –

+3

Nadal używam 'singleline', ponieważ chcę zignorować powrót karetki, którego' maxLine' nie obsługuje. To jest idiotyczne zmienić zachowanie podczas wycofywania metod. –

+1

W moim przypadku singleLine = true i maxLines = 1 dają różne wyniki. Nie tylko pierwszy dodaje ellipsize ("...") na końcu linii. W moim przypadku nie wywołuje on również requestLayout() w ListView, ale wywołuje drugi wariant (maxLines = 1). To ostatnie prowadzi do pewnych błędów. Więc wolę singleLine. – CoolMind

Powiązane problemy