Отключить масштабирование при нажатии полей формы в WebView?

Я просмотрел десятки страниц, если схожие вопросы, ни у кого из них нет ответов, поэтому, надеюсь, это будет другим.

У меня есть веб-просмотр, и я не хочу, чтобы масштаб изображения менялся от начального уровня масштабирования, на который я его настроил. Единственное, что меняет уровень масштабирования в настоящее время, это когда текстовое поле сфокусировано .

Мне нужно сделать это с помощью Java-кода, не используя метатег viewport.

Просто, чтобы у меня не было общих ответов, в моем коде есть следующее, чтобы отключить масштабирование, а также кнопки масштабирования:

mWebView.getSettings().setBuiltInZoomControls(false); mWebView.getSettings().setSupportZoom(false); 

Я думаю, что возможным решением является проверка того, когда внутри WebView происходит событие onFocus или даже событие onClick, а затем zoomOut, но я даже не уверен, что это возможно?

Мы ценим любые предложения.

ОБНОВЛЕНИЕ Этот ответ был написан почти 6 лет назад со всеми новыми версиями Android, которые появились с тех пор, это, скорее всего, устарело.

Эта вещь вызвала серьезную головную боль, но, наконец, была решена благодаря setDefaultZoom(ZoomDensity.FAR);

Важно то, что onCreate и loadUrl перед WebSettings, иначе это вызвало силовую ситуацию. Здесь код ENTIRE, включая импорт (для начинающих пользователей Java)

 package com.my.app; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebSettings.ZoomDensity; import com.phonegap.*; public class MyDroidActivity extends DroidGap { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/www/index.html"); WebSettings settings = appView.getSettings(); settings.setBuiltInZoomControls(false); settings.setSupportZoom(false); settings.setDefaultZoom(ZoomDensity.FAR); } } 

Я решил это на телефонах HTC, добавив WebViewClient с пустым слушателем для onScaleChanged. Мое приложение PhoneGap, так что это выглядит так, но добавление слушателя должно выглядеть одинаково в приложении, отличном от PhoneGap:

 public class Main extends DroidGap { private class NoScaleWebViewClient extends GapViewClient { public NoScaleWebViewClient(DroidGap ctx) { super(ctx); } public void onScaleChanged(WebView view, float oldScale, float newScale) { Log.d("NoScaleWebViewClient", "Scale changed: " + String.valueOf(oldScale) + " => " + String.valueOf(newScale)); } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); this.init(); setWebViewClient(appView, new NoScaleWebViewClient(this)); // disables the actual onscreen controls from showing up appView.getSettings().setBuiltInZoomControls(false); // disables the ability to zoom appView.getSettings().setSupportZoom(false); appView.getSettings().setDefaultZoom(ZoomDensity.FAR); appView.setInitialScale(100); } 

}

Как ни странно, прослушиватель onScaleChange никогда не вызывается – при прослушивании масштабирования он блокирует масштабирование. Я обнаружил, что мне нужны все остальные вызовы (setSupportZoom, setDefaultZoom, setInitialScale), чтобы это работало, и удаление любого из них возвращается к старому, ошибочному поведению.

У меня была такая же проблема. Мне нужно было найти способ масштабирования содержимого веб-браузера до нужного значения, все работало нормально, пока пользователь не начнет вводить текст. Существуют методы, которые работают на относительно новых устройствах android 4.0+, но не работают на старых. Единственный способ, который работает повсюду, – установить значение масштабирования не на Java, а в видовом экране

 <meta name="viewport" content="initial-scale=.80; maximum-scale=.80; minimum-scale=.80;" /> 

Он работает на каждом тестируемом устройстве.

Вы пытались отключить масштабируемое пользователем в теге viewport? Не уверен, что это сработает для вас, но это работает для меня. Мне не нужно было ничего делать на стороне java.

 <meta name="viewport" content="user-scalable=no, width=device-width" /> 

Я тоже столкнулся с этой проблемой, и я решил это так:

 myWebview.getSettings().setDefaultZoom(ZoomDensity.FAR); 

Он нормально работает на Sumsung Galaxy Tab. Я надеюсь, что это поможет вам.

У WebView есть одна специальная вещь, которая, я думаю, вызовет много вопросов и ответов здесь. Случается, что когда URL-адрес загружен, браузер Android по умолчанию запускает Intent, чтобы справиться с этим. Масштабирование принимает участие в этом браузере , а не в вашем Webview.

Решение. Вам нужно добавить WebviewClient, чтобы сообщить Android, что вы обрабатываете браузер самостоятельно. Пример:

 // Use WebView and disable zooming public class MyWebView extends Activity { // nested class private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true } } private WebView mWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.webview); mWebView.setWebViewClient(new HelloWebViewClient()); mWebView.setInitialScale(500); // added after user comment mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setBuiltInZoomControls(false); mWebView.getSettings().setSupportZoom(false); mWebView.loadUrl("http://www.google.com"); } } 

Мой main.xml выглядит так

 <?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

Этот код отключил масштабирование моего HTC Desire под управлением Android 2.2. Прикосновение к полям ввода HTML не имеет значения.

Вся тема WebView / HelloWebViewClient, а также важная подсказка для правильной обработки кнопки «Назад» документируется в Hello Views, Web View . Это должно быть необходимо для чтения для тех, кто использует WebView.

Я считаю, что вы можете установить уровень масштабирования с WebView.setInitialScale метода WebView.setInitialScale . Он принимает значение int как масштаб, поэтому, я думаю, вы хотели бы сделать что-то вроде myWebView.setInitialScale(100) .

Эта проблема была исправлена ​​обновлением прошивки на устройствах HTC, это было (по-видимому) вызвано неправильным интерфейсом пользователя Sense, который нарушает функции Android по умолчанию.

Очень сложно предоставить информацию о том, когда это было исправлено, однако мое веб-приложение больше не масштабируется, когда на текстовое поле щелкнут любое устройство HTC с последней версией прошивки.

Следующие две строки кода будут отключать аспекты масштабирования веб-сайта android:

 // disables the actual onscreen controls from showing up mWebView.getSettings().setBuiltInZoomControls(false); // disables the ability to zoom mWebView.getSettings().setSupportZoom(false);