android padrao Clicar em URLs abre o navegador padrão



navegador padrao samsung (4)

Eu carreguei um URL externo no meu WebView . Agora, o que preciso é que, quando o usuário clicar nos links da página carregada, ele tenha que funcionar como um navegador normal e abrir o link no mesmo WebView . Mas está abrindo o navegador padrão e carregando a página lá?

Eu habilitei o JavaScript. Mas ainda não está funcionando. Eu esqueci alguma coisa?

https://src-bin.com


Answer #1

A resposta de Arulx Z era exatamente o que eu estava procurando.

Eu estou escrevendo um aplicativo com gaveta de navegação com recyclerview e webviews, para manter a navegação na web dentro do aplicativo, independentemente de hiperlinks clicados (assim não iniciar o navegador da web externo). Para isso, basta colocar as duas linhas de código a seguir:

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

exatamente sob sua instrução WebView.

Aqui está um exemplo do meu código WebView implementado:

public class WebView1 extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
    wv.setWebViewClient(new WebViewClient());    //the lines of code added
    wv.setWebChromeClient(new WebChromeClient()); //same as above

    wv.loadUrl("http://www.google.com");
}}

Dessa forma, cada link clicado no site será carregado dentro do seu WebView. (Usando o Android Studio 1.2.2 com todos os SDKs atualizados)


Answer #2

Adicione estas duas linhas no seu código -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

Answer #3

O método boolean shouldOverrideUrlLoading(WebView view, String url) foi preterido na API 24. Se você estiver suportando novos dispositivos, deverá usar boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) .

Você pode usar os dois fazendo algo assim:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
} else {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
}

Answer #4

Se você estiver usando um WebView terá que interceptar os cliques se não quiser o comportamento padrão do Android.

Você pode monitorar eventos em um WebView usando um WebViewClient . O método que você quer é shouldOverrideUrlLoading() . Isso permite que você execute sua própria ação quando um determinado URL é selecionado.

Você define o WebViewClient do seu WebView usando o método setWebViewClient() .

Se você observar o exemplo do WebView no SDK, há um exemplo que faz exatamente o que você deseja. É tão simples como:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}




android-websettings