Respostas:
Do código fonte :
// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;
// SOME OTHER SUTFFF.......
/**
* Set the WebViewClient.
* @param client An implementation of WebViewClient.
*/
public void setWebViewClient(WebViewClient client) {
mWebViewClient = client;
}
/**
* Set the WebChromeClient.
* @param client An implementation of WebChromeClient.
*/
public void setWebChromeClient(WebChromeClient client) {
mWebChromeClient = client;
}
O uso do WebChromeClient permite que você lide com diálogos, favicons, títulos e o progresso de Javascript. Veja este exemplo: Adicionando suporte a alert () a um WebView
À primeira vista, há muitas diferenças entre o WebViewClient e o WebChromeClient . Mas, basicamente: se você estiver desenvolvendo um WebView que não exija muitos recursos, mas renderize HTML, basta usar a WebViewClient
. Por outro lado, se você deseja (por exemplo) carregar o ícone favorito da página que está renderizando, use um WebChromeClient
objeto e substitua-o onReceivedIcon(WebView view, Bitmap icon)
.
Na maioria das vezes, se você não quiser se preocupar com essas coisas ... basta fazer o seguinte:
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
E seu WebView (em teoria) terá todos os recursos implementados (como o navegador nativo do Android).
Sinto que esta pergunta precisa de mais detalhes. Minha resposta é inspirada na Programação para Android, The Nerd Ranch Guide (2ª edição).
Por padrão , o JavaScript está desativado no WebView. Você nem sempre precisa ativá-lo, mas para alguns aplicativos, pode ser necessário.
O carregamento do URL deve ser feito após a configuração do WebView, para que você faça isso por último. Antes disso, você getSettings()
ativa o JavaScript chamando para obter uma instância do WebSettings e chamando WebSettings.setJavaScriptEnabled(true)
. WebSettings é a primeira das três maneiras pelas quais você pode modificar seu WebView. Possui várias propriedades que você pode definir, como a sequência do agente do usuário e o tamanho do texto.
Depois disso, você configura seu WebViewClient. WebViewClient é uma interface de eventos. Ao fornecer sua própria implementação do WebViewClient, você pode responder à renderização de eventos. Por exemplo, você pode detectar quando o renderizador começa a carregar uma imagem de um URL específico ou decidir se deve reenviar uma solicitação POST ao servidor.
O WebViewClient possui muitos métodos que você pode substituir, a maioria dos quais não será tratada . No entanto, você precisa substituir a implementação padrão do WebViewClient shouldOverrideUrlLoading(WebView, String)
. Este método determina o que acontecerá quando um novo URL for carregado no WebView, como pressionar um link. Se você retornar true, estará dizendo: "Não manipule este URL, eu mesmo estou manipulando". Se você retornar falso, estará dizendo: "Vá em frente e carregue este URL, WebView, não estou fazendo nada com ele".
A implementação padrão dispara uma intenção implícita com a URL, assim como você fez anteriormente. Agora, porém, isso seria um problema grave. A primeira coisa que alguns aplicativos da Web fazem é redirecioná-lo para a versão móvel do site. Com o WebViewClient padrão, isso significa que você é enviado imediatamente para o navegador da web padrão do usuário. É exatamente isso que você está tentando evitar. A correção é simples - basta substituir a implementação padrão e retornar false.
Use o WebChromeClient para aprimorar as coisas Como você está criando um tempo para criar seu próprio WebView, vamos aprimorá-lo um pouco adicionando uma barra de progresso e atualizando a legenda da barra de ferramentas com o título da página carregada.
Para ligar o ProgressBar, você usará a segunda chamada de retorno no WebView: WebChromeClient
.
WebViewClient é uma interface para responder à renderização de eventos; O WebChromeClient é uma interface de eventos para reagir a eventos que devem alterar elementos do chrome no navegador. Isso inclui alertas JavaScript, ícones favoritos e, é claro, atualizações para carregar o progresso e o título da página atual.
Ligue-o onCreateView(…)
. Usando o WebChromeClient para aprimorar as atualizações de progresso e atualizações de títulos, cada um tem seu próprio método de retorno de chamada
onProgressChanged(WebView, int)
e onReceivedTitle(WebView, String)
. O progresso do qual você recebe onProgressChanged(WebView, int)
é um número inteiro de 0 a 100. Se for 100, você sabe que a página terminou de carregar, para ocultar a ProgressBar configurando sua visibilidade para View.GONE
.
Exoneração de responsabilidade: Estas informações foram obtidas de Android Programming: The Big Nerd Ranch Guide com permissão dos autores. Para mais informações sobre este livro ou para comprar uma cópia, visite bignerdranch.com.