Открытие веб-браузера не в новом браузере
Я реализую webview. Я хочу две кнопки в верхней части веб-страницы.
У меня есть одна вертикальная линейная компоновка, внутри которой один горизонтальный макет с двумя кнопками и один веб-просмотр вне горизонтальной компоновки.
Я просто загружаю URL-адрес Google в код Java.
Каждый раз, когда я запускаю приложение, он открывает новый браузер поверх приложения, и кнопки скрываются. Он не показывает кнопки над веб-просмотром.
Пожалуйста, помогите и скажите мне, как загрузить URL-адрес в веб-обозревателе, не открывая другой браузер, или как я могу предотвратить его, открыв собственный браузер, чтобы страница загружалась в веб-обозреватель, а не в новый браузер.
Спасибо всем
Ответы
Ответ 1
Макет должен выглядеть примерно так:
<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
Ya. Вы должны реализовать класс WebViewClient
и Override
shouldOverrideURLLoading()
в этом классе.
Почему? Поскольку webview
просто откройте свою "точную ссылку", если эта ссылка перенаправляет другие ссылки, андроид откроет браузер по умолчанию для этого действия.
В вашем примере, как вы знаете, при подключении к 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);
}
}
}
Надеюсь, это поможет вам:)
Ответ 3
Добавление следующего кода до того, как loadUrl() решит эту проблему,
wv.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}});
Выполнение этой задачи должно выполняться с помощью команды useOverrideUrlLoading() из WebViewClient. Здесь идет Android doc для shouldOverrideUrlLoading,
Дайте хост-приложению возможность взять элемент управления, когда новый URL-адрес будет загружен в текущем WebView. Если WebViewClient не предоставлен, по умолчанию WebView попросит Activity Manager выбрать правильный обработчик для URL-адреса. Если WebViewClient предоставлен, верните true, это означает, что приложение-хозяин обрабатывает URL-адрес, а return false означает, что текущий WebView обрабатывает URL-адрес...
http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading%28android.webkit.WebView,%20java.lang.String%29
Ответ 4
Моя реализация 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);
}
И конечный результат:
![Пример изображения]()
Ответ 5
У меня была одна и та же проблема, и, к счастью, после просмотра в Интернете около часа я перепутал некоторые вещи, которые я нашел, и это сработало.
это код:
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 Flow", ссылка была URL-адресом, который я хотел открыть.
Ответ 6
Я пробовал это. он работает для меня. он не открывает новое окно. он откроет только страницу веб-просмотра. его скрытие для нового окна запроса браузера.
private WebView webView;
String strUrl="url" ;
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(strUrl);
webView.setWebViewClient(new WebViewClient());
Ответ 7
Добавьте приведенную ниже строку в свой XML файл, имеющий веб-просмотр
tools:context=".MyActivity"
(название вашей деятельности)
Ответ 8
Это может быть поздний пост, но это может помочь другим разработчикам...
Вам нужно установить setWebViewClient на веб-просмотр перед загрузкой 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 перед возвратом значения.
Ответ 9
этот код работает для меня, спасибо...
WebView wbView = (WebView) findViewById(R.id.webView);
wbView.getSettings().setJavaScriptEnabled(true);
wbView.setWebViewClient(new WebViewClient());
wbView.loadUrl("http://ppid.polinela.ac.id");