Почему функция pinch-to-zoom не работает в моем Android-браузере?
У меня есть активность с макетом вроде этого:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<include layout="@layout/window_title" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_below="@+id/linear_layout"/>
</RelativeLayout>
Вот как я его настраиваю:
// Enable JavaScript.
WebView myWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
// Settings so page loads zoomed-out all the way.
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webSettings.setBuiltInZoomControls(true);
Здесь параметр версии из моего файла манифеста:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="17" />
Я пытаюсь загрузить эту страницу в WebView:
https://new.livestream.com/lcboise
Страница загружается просто отлично, но я не могу ее зажать. Я пробовал разные комбинации настроек WebView (выше, в том числе другие, не перечисленные), но он просто не будет масштабироваться.
замечания:
1) Загрузите другую страницу, которую я использую (https://lcboise.infellowship.com/UserLogin) в EXACT, тот же WebView позволяет мне увеличивать масштаб.
2) Мое основное тестовое устройство, где НЕ работает, - это HTC One, работающий под управлением Android версии 4.0.4.
3) Я могу загружать и масштабировать страницу livestream на более старом тестовом устройстве. Я использую версию v2.3.3 для Android.
Возможно ли, что что-то на самой странице нарушает работу WebView на HTC One? Если да, то какие-либо догадки о том, что это возможно?
Обновить [РЕШЕНИЕ]:
Вот что мне пришлось добавить в мой WebView, чтобы заставить работать сжимать-масштабировать:
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
String javascript="javascript:document.getElementsByName('viewport')[0].setAttribute('content', 'initial-scale=1.0,maximum-scale=10.0');";
view.loadUrl(javascript);
}
});
Ответы
Ответ 1
Это страница, с которой вы связаны, имеет следующий метатег:
<meta name="viewport" content="width=1024, maximum-scale=1.0, target-densitydpi=device-dpi">
На странице, которая работает, есть другой метатег просмотра. Бит maximum-scale
сообщает WebView, что он не позволяет масштабировать более чем указанное количество.
Сайт также должен быть разбит в любом современном мобильном браузере. Установка максимальной шкалы на такое низкое значение не очень "мобильная", так что это может быть просто ошибкой на сайте. Вы пробовали связаться с владельцем, возможно, они могут исправить его на стороне сервера?
В WebView вы не можете многое сделать, что не приведет к неправильной обработке других сайтов. Вы можете попробовать ввести JS для исправления страницы изменения метатега в качестве крайней меры.
Ответ 2
Вы пробовали это предложение?
webSettings.setSupportZoom(true);
См. Отключить масштабирование в WebView?
Обратите внимание, что ссылка касается отключения масштабирования. Но, возможно, ваш зум отключается по умолчанию, как предлагают некоторые пользователи.
Ответ 3
Добавьте эти две строки, чтобы включить масштабирование при просмотре веб-страниц
webview.getSettings().setSupportZoom(true);
webview.getSettings().setBuiltInZoomControls(true);
Ответ 4
Для увеличения:
webSettings.getSettings().setBuiltInZoomControls(true);
Отключить:
webSettings.getSettings().setBuiltInZoomControls(false);
Ответ 5
wv.getSettings() setBuiltInZoomControls (истина).
wv.getSettings() setDisplayZoomControls (ложные);.
работал безупречно для меня.
Ответ 6
В моем вопросе я преуспел с вышеупомянутым js-внедрением из-за ограничений области просмотра. Каким-то образом onPageFinished в моем случае не сработало, но onLoadResource помогло.
@Override
public void onLoadResource(WebView view, String url) {
view.loadUrl("javascript:document.getElementsByName(\"viewport\")[0].setAttribute(\"content\", \"width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes\");");
super.onLoadResource(view, url);
}