Existe alguma maneira de rolar um ScrollView
programaticamente para uma determinada posição?
Eu criei uma dinâmica TableLayout
que é colocada em a ScrollView
. Então, eu quero que em uma ação específica (como clicar em um botão etc.), a linha específica role automaticamente para a posição superior.
É possível?
java
android
scrollview
android-scrollview
Arun Badole
fonte
fonte
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });
A resposta da Pragna nem sempre funciona, tente o seguinte:
ou
se você quiser rolar para começar
fonte
mScrollView.fullScroll(mScrollView.FOCUS_DOWN);
com sucesso.mScrollView.smoothScrollTo(0, mScrollView.getBottom());
.post
aqui?Eu queria que o scrollView rolasse diretamente após onCreateView () (não depois, por exemplo, de um clique no botão). Para fazê-lo funcionar, eu precisava usar um ViewTreeObserver:
Mas lembre-se de que isso será chamado sempre que algo for projetado (por exemplo, se você definir uma exibição como invisível ou semelhante); portanto, não se esqueça de remover este ouvinte se você não precisar mais dele com:
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
no SDK Nív. <16ou
public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
no SDK Nvl> = 16fonte
Há muitas boas respostas aqui, mas quero apenas acrescentar uma coisa. Às vezes, você deseja rolar o ScrollView para uma visualização específica do layout, em vez de uma rolagem completa para cima ou para baixo.
Um exemplo simples: em um formulário de registro, se o usuário tocar no botão "Inscrição" quando um texto de edição do formulário não estiver preenchido, você deverá rolar para o texto de edição específico para informar ao usuário que ele deve preencher esse campo.
Nesse caso, você pode fazer algo assim:
ou, se você desejar uma rolagem suave em vez de uma rolagem instantânea:
Obviamente, você pode usar qualquer tipo de visualização em vez de Editar texto. Observe que getBottom () retorna as coordenadas da vista com base em seu layout pai, portanto todas as vistas usadas no ScrollView devem ter apenas um pai (por exemplo, um Layout Linear).
Se você tem vários pais dentro do filho do ScrollView, a única solução que encontrei é chamar requestChildFocus na exibição pai:
mas, neste caso, você não pode ter uma rolagem suave.
Espero que esta resposta possa ajudar alguém com o mesmo problema.
fonte
Use algo como isto:
ou
fonte
Tente usar o
scrollTo
método Mais informaçõesfonte
Se você quiser rolar instantaneamente, poderá usar:
Ou se você quiser rolar suavemente e lentamente para poder usar isso:
fonte
catch
bloco faz?** para rolar até a altura desejada. Eu vim com uma boa solução **
fonte
Eu consegui isso para rolar para a parte inferior de um ScrollView (com um TextView dentro):
(Eu coloquei isso em um método que atualiza o TextView)
fonte
Sim você pode.
Digamos que você tenha um
Layout
e, dentro disso, você tem muitosViews
. Portanto, se você desejar rolar para qualquerView
programaticamente, precisará escrever o seguinte trecho de código:Por exemplo:
content_main.xml
MainActivity.java
Se você quiser rolar para um específico
View
, digamos txtview , neste caso, basta escrever:E você terminou.
fonte
Nota: se você já estiver em um tópico, precisará criar um novo tópico, ou não será rolado uma nova altura longa até o final completo (para mim). Por exemplo:
fonte
Adicionando outra resposta que não envolve coordenadas.
Isso trará a visualização desejada para o foco (mas não para a posição superior):
child - O filho deste ViewParent que deseja foco. Essa visualização conterá a visualização focada. Não é necessariamente a visão que realmente tem foco.
focado - A visão de descendente de criança que realmente tem foco
fonte
apenas rolagem de página:
fonte
Todo mundo está postando respostas tão complicadas.
Encontrei uma resposta fácil, para rolar para baixo, muito bem:
E, se necessário, você pode colocar a segunda linha de código acima em um executável:
Levei muita pesquisa e brincadeira para encontrar esta solução simples. Espero que ajude você também! :)
fonte
Eu estava usando o Runnable com sv.fullScroll (View.FOCUS_DOWN); Funciona perfeitamente para o problema imediato, mas esse método faz com que o ScrollView retire o foco da tela inteira; se você fizer o AutoScroll sempre, nenhum EditText poderá receber informações do usuário; minha solução foi usar um código diferente. sob o executável:
sv.scrollTo (0, sv.getBottom () + sv.getScrollY ());
fazendo o mesmo sem perder o foco em visões importantes
saudações.
fonte
está funcionando para mim
fonte
fonte
fonte