Pergunta

Para colocá-lo simples: eu quero marcar a posição atual (provavelmente várias posições) em um arquivo html exibido em um WebView para mais tarde restaurá-lo. Qualquer pequena dica ajudaria. :)

Foi útil?

Solução

Se por "a posição atual" você quer dizer um lugar ponto em uma determinada página, eu não acredito que é possível ... pelo menos não puramente de Java. Todo o WebKit API exposta a Java carece de muita coisa que lida com o conteúdo das páginas.

Se você tem controle sobre o conteúdo da página, e não há uma maneira de saber essas posições através de páginas em JavaScript, você pode:

Etapa # 1: Use WebView#addJavascriptInterface() para adicionar um objeto com algum tipo de método recordPosition(), salvando as informações onde for mais apropriado

Etapa # 2:. Criar uma função JavaScript que chamadas recordPosition() no objeto injetado

e, em seguida:

Etapa # 3a: gatilho que função JavaScript da própria Javascript (por exemplo, com base em um clique), ou

Etapa # 3-B:. Chamada loadUrl("javascript:..."); em seu WebView, onde ... é substituído pelo código Javascript para acionar a função Javascript a partir da etapa # 2

Restaurar estas posições teria que trabalhar da mesma maneira:. Tem Javascript fazer as restaurações reais, possivelmente desencadeada por código Java

Note que eu não tenho idéia se o que você quer (obter / definir a posição atual) está disponível a partir de Javascript, como eu não sou muito de um codificador no navegador.

Outras dicas

A abordagem que eu tomei foi a seguinte:

No método onSaveInstanceState(), calcular quão baixo a página que o usuário tivesse rolado.

    int contentHeight = webView.getContentHeight();
    int scrollY = webView.getScrollY();

    float scrollPercent = ((float) scrollY / ((float) contentHeight));

Stash que no pacote. Ao restaurar a página no método onCreate(), esperar a página para carregar acabamento (em WebClient.onPageFinished()), vá até a posição gravada:

    int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent);
    webView.scrollTo(0, y);
  • Usando um float e calcular um rácio obras no caso de inversão entre paisagem e retrato.
  • trabalho Maio bem o suficiente , mas não perfeitamente quando misturado com imagens redimensionamento automático.
  • Scale também pode ser levado em conta. I tendem a esconder a escala em uma preferência no método onPause(), e depois webView.setInitialScale(scale) antes de iniciar o carregamento da página.
  • Eu descobri que definir a visão da web para invisível quando olhares scrollPercent > 0 melhores.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top