Estou exibindo texto em uma visualização de texto que parece ser muito longa para caber em uma tela. Preciso tornar meu TextView rolável. Como eu posso fazer isso?
Aqui está o código:
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
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).ScrollView
ocupar o espaço necessário (por exemplo, através doandroid:fillViewport
atributo) ou define o tamanho específico que deseja. O usomaxLines
não deve ser usado para definir tamanhos de elementos da interface do usuário, para que não haja solução.Foi assim que fiz puramente em XML:
NOTAS:
android:fillViewport="true"
combinado comandroid:layout_weight="1.0"
fará com que a visualização de texto ocupe todo o espaço disponível.Ao definir o Scrollview, NÃO especifique,
android:layout_height="fill_parent"
caso contrário, o scrollview não funcionará! (isso me levou a perder uma hora agora! FFS).DICA PRO:
Para rolar programaticamente até o final após anexar o texto, use o seguinte:
fonte
mTextView.getBottom()
, basta usar o métodomScrollView.fullScroll(View.FOCUS_DOWN)
, pois faz parte da API ScrollView. Veja aqui e aqui para mais informações.LinearLayout
ou oScrollView
pode ser inútil neste exemplo (eu removi oLinearLayout
completamente). Ele também adverte que, para oTextView
, deve serandroid:layout_height="wrap_content"
igual aoScrollView
. Esses avisos podem ocorrer devido aos três anos que se passaram desde que esta resposta foi publicada. Independentemente disso, esta resposta suporta rolagem suave e movimento<!--suppress AndroidLintUselessParent -->
acima doScrollView
arquivo xml cuidará desses avisos.Tudo o que é realmente necessário é o setMovementMethod (). Aqui está um exemplo usando um LinearLayout.
Arquivo main.xml
Arquivo WordExtractTest.java
fonte
ScrollView
métodoStringBuilder
vez de umString
... o que você tem é um pouco de desperdício.Crie sua visualização de texto apenas adicionando isso
fonte
Não é necessário colocar
Você pode fazer seu trabalho simplesmente adicionando:
E, coloque este código na sua classe Java:
fonte
Você também pode
TextView
por umScrollView
; ouScrollingMovementMethod.getInstance();
.fonte
A melhor maneira que encontrei:
Substitua o TextView por um EditText por estes atributos extras:
Não há necessidade de agrupar em um ScrollView.
fonte
ScrollView
é o caminho correto a seguir.Simples. Foi assim que eu fiz:
Lado XML:
Lado do Java:
Bônus:
Para permitir que a exibição de texto role para baixo conforme o texto a preenche, é necessário adicionar:
para o arquivo xml TextView. Ele irá rolar para baixo automaticamente à medida que mais texto aparecer.
Obviamente, você precisa adicionar o texto usando a função anexar em vez do texto definido:
Eu usei para fins de log.
Eu espero que isso ajude ;)
fonte
Isso é "Como aplicar o ScrollBar ao seu TextView", usando apenas XML.
Primeiro, você precisa pegar um controle Textview no arquivo main.xml e escrever algum texto nele ... assim:
Em seguida, coloque o controle de exibição de texto entre a visualização de rolagem para exibir a barra de rolagem para este texto:
É isso aí...
fonte
Isso fornecerá texto de rolagem suave com uma barra de rolagem.
fonte
A "dica profissional" acima de Someone Somewhere ( tornando o TextView rolável no Android ) funciona muito bem, no entanto, e se você estiver adicionando texto dinamicamente ao ScrollView e quiser rolar automaticamente para baixo depois de apenas um acréscimo quando o usuário estiver em a parte inferior do ScrollView? (Talvez porque se o usuário rolou para cima para ler algo que você não deseja redefinir automaticamente para baixo durante um anexo, o que seria irritante.)
Enfim, aqui está:
O mTextStatus.getLineHeight () fará com que você não roleToBottom () se o usuário estiver dentro de uma linha a partir do final do ScrollView.
fonte
Se você deseja que o texto seja rolado na visualização de texto, siga o seguinte:
Primeiro, você deve subclassar a visualização de texto.
E então use isso.
A seguir, é apresentado um exemplo de uma exibição de texto em subclasse.
Agora, você deve usar isso no XML desta maneira:
É isso aí.
fonte
Adicione o seguinte na visualização de texto em XML.
E finalmente, adicione
no arquivo Java.
fonte
Não encontrei a rolagem do TextView para suportar o gesto de 'arremessar', onde continua rolando após um movimento para cima ou para baixo. Acabei implementando isso sozinho porque não queria usar o ScrollView por vários motivos, e não parecia haver um MovementMethod que permitisse selecionar texto e clicar em links.
fonte
No kotlin para tornar a visualização de texto rolável
e também adicione em xml essa propriedade
fonte
Ao concluir a rolagem, adicione esta linha à última linha da exibição ao inserir qualquer coisa na exibição:
fonte
Se você não quiser usar a solução EditText, poderá ter melhor sorte com:
fonte
Adicione isso ao seu layout XML:
E no código você deve escrever as seguintes linhas:
fonte
O código abaixo cria uma visualização de texto de rolagem horizontal automática:
Ao adicionar o TextView ao xml, use
Defina as seguintes propriedades do TextView em onCreate ()
fonte
você pode rolar agora.
fonte
Use-o assim
fonte
No meu caso.Constraint Layout.AS 2.3.
Implementação de código:
XML:
fonte
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:
Por fim, altere seu 'TextView' em XML:
De:
<TextView
Para:
<com.your_app_goes_here.PerfectScrollableTextView
fonte
Coloque
maxLines
escrollbars
dentro do TextView em xml.Então no código java.
textView.setMovementMethod(new ScrollingMovementMethod());
fonte
Eu tive esse problema quando estava usando
TextView
dentro doScrollView
. Esta solução funcionou para mim.fonte
sempre que você precisar usar o ScrollView como pai e também usar o método de movimento de rolagem com o TextView.
E quando você retrata a paisagem do seu dispositivo nesse momento, ocorre algum problema . (como) a página inteira é rolável, mas o método de movimento de rolagem não pode funcionar.
se você ainda precisar usar o ScrollView como pai ou método de movimento de rolagem, use também abaixo de desc.
Se você não tiver nenhum problema, use EditText em vez de TextView
ver abaixo :
Aqui, o EditText se comporta como TextView
E seu problema será resolvido
fonte
XML - você pode usar o
android:scrollHorizontally
atributoSe é permitido que o texto seja maior que a visualização (e, portanto, pode ser rolado horizontalmente).
Pode ser um valor booleano, como "true" ou "false".
Prigramacaly -
setHorizontallyScrolling(boolean)
fonte
Tente o seguinte:
fonte