Подтвердить что ты не робот

Почему функция 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);
        }
    });
4b9b3361

Ответ 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);
}