Открытие веб-просмотра не в новом браузере - PullRequest
19 голосов
/ 06 апреля 2011

Я реализую веб-просмотр. Я хочу две кнопки в верхней части веб-страницы.

У меня есть одна вертикальная линейная компоновка, внутри которой одна горизонтальная компоновка с двумя кнопками и одно веб-представление вне горизонтальной компоновки.

Я просто загружаю URL Google в коде Java.

Каждый раз, когда я запускаю приложение, оно открывает новый браузер поверх приложения и кнопки скрываются. Это не показывает кнопки над веб-представлением. Пожалуйста, помогите и скажите мне, как я могу загрузить URL в веб-просмотре, не открывая другой браузер, или как я могу предотвратить его, открыв собственный браузер, чтобы страница загружалась в самом веб-обзоре, а не в новом браузере.

Спасибо всем

Ответы [ 9 ]

47 голосов
/ 08 марта 2012

Ya. Вы должны реализовать класс WebViewClient и метод Override shouldOverrideURLLoading() в этом классе.

Почему? Потому что webview просто откройте вашу «точно ссылку», если эта ссылка перенаправит другие ссылки, Android откроет браузер по умолчанию для этого действия.

В вашем примере, как вы знаете, при подключении к google.com Google перенаправляет на Google в вашей стране. Например, если вы находитесь в Китае, Google перейдет на google.com.cn, если во Вьетнаме будет google.com.vn.

Вот мой простой пример: (вы можете представить, что это новый браузер, смех)

Сначала файл макета XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">

        <EditText 
            android:id="@+id/url"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:hint="Input URL"/>

        <Button 
            android:id="@+id/run"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="0"
            android:text="GO"/>

    </LinearLayout>

    <WebView 
        android:id="@+id/webview"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"/>

</LinearLayout>

Вот код основной деятельности:

package com.basic;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

public class WebViewExample extends Activity{ 

    WebView webView;

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

        webView = (WebView) findViewById(R.id.webview);

        Button button = (Button) findViewById (R.id.run);
        button.setOnClickListener(new OnClickListener() {           
            @Override
            public void onClick(View v) {
                gotoPage();             
            }
        });

    }

    private void gotoPage(){

        EditText text = (EditText) findViewById(R.id.url);
        String url = text.getText().toString();

        WebSettings webSettings = webView.getSettings();
        webSettings.setBuiltInZoomControls(true);

        webView.setWebViewClient(new Callback());  //HERE IS THE MAIN CHANGE
        webView.loadUrl(url);

    }

    private class Callback extends WebViewClient{  //HERE IS THE MAIN CHANGE. 

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return (false);
        }

    }

}

Надеюсь, это поможет вам:)

21 голосов
/ 09 декабря 2012

Добавление следующего кода перед loadUrl () решит эту проблему,

wv.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
          view.loadUrl(url);
          return true;
           }}); 

Должен выполнить эту работу shouldOverrideUrlLoading () из WebViewClient. Здесь идет документ для Android для shouldOverrideUrlLoading,

Дайте хост-приложению возможность взять на себя управление, когда новый URL-адрес будет загружен в текущем WebView. Если WebViewClient не предоставлен, по умолчанию WebView попросит Activity Manager выбрать правильный обработчик для URL. Если предоставляется WebViewClient, возвращаемое значение true означает, что хост-приложение обрабатывает URL, а возвращаемое значение false означает, что текущий WebView обрабатывает URL-адрес ...

http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading%28android.webkit.WebView,%20java.lang.String%29

10 голосов
/ 27 сентября 2015

Моя реализация XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent">

<WebView
    android:background="@android:color/transparent"
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></WebView>
</RelativeLayout>

Моя реализация Java:

WebView webView;
public final String GlobalUrl = "http://slashdot.org/";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_application_activity);

    webView = (WebView) findViewById(R.id.webView);
    loadWebViewLoad(webView);
}

private void loadWebViewLoad(WebView webview) {
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webview.getSettings().setSupportMultipleWindows(true);
    webview.setWebViewClient(new WebViewClient());
    webview.setWebChromeClient(new WebChromeClient());
    webview.loadUrl(GlobalUrl);
}

И конечный результат:

Example image

3 голосов
/ 22 сентября 2015

У меня возникла точно такая же проблема, и, к счастью, после просмотра веб-страниц около часа я смешал некоторые вещи, которые нашел, и это сработало.

это код:

WebView webView;
webView = ((WebView) rootView.findViewById(R.id.detail_area));
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl(mItem.link);

, где "detail_area" было моим веб-просмотром, rootView был моим выбранным элементом в "Потоке Master / Detail", ссылка была URL, который я хотел открыть.

3 голосов
/ 06 апреля 2011

Макет должен выглядеть примерно так:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_height="fill_parent"
                 android:layout_width="fill_parent"
                 android:orientation="vertical">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <Button android:id="@+id/button1"
                android:layout_width="0dip"
                android:layout_height="wrap_content"                
                android:layout_gravity="top"
                android:layout_weight="1"/>
            <Button android:id="@+id/button2"
                android:layout_width="0dip"
                android:layout_height="wrap_content"                
                android:layout_gravity="top"
                android:layout_weight="1" />
        </LinearLayout>
        <WebView 
            android:id="@+id/webview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
</LinearLayout>

И вы также можете обратиться к Нужна помощь в переходе со стандартного браузера Android на веб-просмотр , чтобы увидеть, запускаете ли вы URLправильно.

2 голосов
/ 08 октября 2013

Я попробовал это.это работает для меня.это не открывает новое окно.откроется только веб-страница.скрывается новый браузер, спрашивающий об открытии окна ..

private WebView webView;
String strUrl="url" ;

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(strUrl);
webView.setWebViewClient(new WebViewClient());
1 голос
/ 23 апреля 2013

Добавьте нижеприведенную строку в ваш xml-файл, который имеет webview

tools:context=".MyActivity" (название вашей деятельности)

0 голосов
/ 20 июня 2019

Это может быть поздняя публикация, но она может помочь другим разработчикам ...

Вам нужно установить setWebViewClient на webview перед загрузкой URL-адреса на него, например:ниже,

webview.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }
});

В некоторой предыстории вышеприведенного кода Документация заявляет в литеральных словах, как показано ниже, о методе shouldOverrideUrlLoading .

 * @param view The WebView that is initiating the callback.
 * @param request Object containing the details of the request.
 * @return {@code true} if the host application wants to leave the current WebView
 *         and handle the url itself, otherwise return {@code false}.
 */
@Override
@SuppressWarnings("deprecation") // for invoking the old shouldOverrideUrlLoading.
@RequiresApi(21)
public boolean shouldOverrideUrlLoading(@NonNull WebView view,
        @NonNull WebResourceRequest request) {
    if (Build.VERSION.SDK_INT < 21) return false;
    return shouldOverrideUrlLoading(view, request.getUrl().toString());
}

Если вы видите документациювыше для возвращая значение , он говорит,

@return {@code true} if the host application wants to leave the current WebView
  *and handle the url itself, otherwise return {@code false}.

Так просто говорится: если вы вернете true из shouldOverrideUrlLoading метод, этопопросит браузер по умолчанию вашего устройства обработать запрос на открытие URL, и если вы вернете false , тогда ваш URL будет загружен только через веб-просмотр.

Теперь вы можете загрузить свойURL в веб-просмотре либо после этого setWebViewClient вызова, либо вы также можете загрузить свой URL-адрес внутри shouldOverrideUrlLoading метода перед возвратом значения.

0 голосов
/ 09 сентября 2018

этот код работает для меня, спасибо ...

    WebView wbView = (WebView) findViewById(R.id.webView);

    wbView.getSettings().setJavaScriptEnabled(true);
    wbView.setWebViewClient(new WebViewClient());
    wbView.loadUrl("http://ppid.polinela.ac.id");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...