Eu lutei com isso por mais de uma semana e finalmente descobri como fazer isso funcionar!
Meu problema era que tudo rolaria como um 'bloco'. O texto em si estava rolando, mas como um pedaço, em vez de linha por linha. Obviamente, isso não funcionou para mim, porque cortaria as linhas na parte inferior. Todas as soluções anteriores não funcionaram para mim, então criei as minhas.
Aqui está a solução mais fácil de longe:
Crie um arquivo de classe chamado: 'PerfectScrollableTextView' dentro de um pacote e copie e cole esse código em:
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;
public class PerfectScrollableTextView extends TextView {
public PerfectScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
public PerfectScrollableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
public PerfectScrollableTextView(Context context) {
super(context);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if(focused)
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean focused) {
if(focused)
super.onWindowFocusChanged(focused);
}
@Override
public boolean isFocused() {
return true;
}
}
Por fim, altere seu 'TextView' em XML:
De: <TextView
Para: <com.your_app_goes_here.PerfectScrollableTextView
maxLines
exige que você digite um número arbitrário; isso não é algo que funcione para todos os tamanhos de tela e fontes? Acho mais simples envolvê-lo com aScrollView
, o que significa que não preciso adicionar mais nenhum atributo ou código XML (como definir o método de movimento).