Intereting Posts
Как использовать функцию onBlur в EditText в android? Как отображать таймер обратного отсчета в строке состояния в android, например, отображение времени? Javascript: Любые способы обхода Chrome для Android, чтобы отключить touchmove и touchhend прослушиватели событий, кроме использования event.preventDefault ()? Android – эмулятор в ландшафтном режиме, экран не вращается Gradle buildConfigField с целочисленной переменной Оптимальная практика подключения TCP к TCP Как получить интерактивные гиперссылки в AlertDialog из строкового ресурса? Как отобразить PDF через веб-браузер Android без «загрузки» в первую очередь Android – Как отключить кнопку поиска, как реализовать onSearchRequested ()? Консенсус по ленивой загрузке битмапов в адаптере (выделение на Bitmap.recycle ()) Анимировать высоту PhotoView для Android Не удалось нормализовать путь для файла «E: \ WorkSpace \ mapdemo \ app \ build \ intermediates \ mockable-Google Inc.: API Google: 21.jar ' Анализ с помощью входа в Facebook – возможно, поскольку APK v42 или Graph API v2.4 Быстрый поиск по имени файла Android studio Избежать потери данных из-за прерывания при сохранении файлов на Android?

Есть ли способ отключить функцию масштабирования полей ввода в веб-просмотре?

Когда пользователь нажимает кнопку ввода или текстовое поле, приложение масштабируется. Есть ли простой способ отключить его?

В настоящее время есть метатег:

meta name="viewport" content="width=device-width; height=device-height; initial-scale=1.0; maximum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi;" 

Все выглядит великолепно, пока я не посмотрю на него на устройстве с Android 2.2. Особенно HTC Evo 4G .

Solutions Collecting From Web of "Есть ли способ отключить функцию масштабирования полей ввода в веб-просмотре?"

Я много перепутал с этим.

У вас должны быть разные решения для разных размеров экрана и телефонов, сделанные с серверов.

Например, это относится к желанию HTC:

 <meta content='True' name='HandheldFriendly' /> <meta content='width=640px; initial-scale=0.50; maximum-scale=0.50;minimum-scale=0.50;' name='viewport' /> <meta name="viewport" content="width=640px" /> 

Это для iphone:

 <meta name="viewport" content="width=640px,user-scalable=0" /> 
 webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); 

Этот метод устарел на уровне API 19.

Это работает в последних версиях Android 4.4.2.

 webView.setInitialScale(0);//default,no zoom webView.getSettings().setSupportZoom(true); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setLoadWithOverviewMode(false); webView.getSettings().setUseWideViewPort(false); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

Я нашел ответ, по крайней мере, для меня. Он работает на HTC желание и Sansung 3 низким разрешением.

  • Удалите метатеги из окна просмотра из HTML.

  • В java примените решение, которое можно найти здесь .

     this.appView.getSettings().setSupportZoom( true ); //Modify this this.appView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);//Add this 

    Не забудьте проверить, доступна ли версия WebSettings.ZoomDensity.FAR для версии SDK (7 и выше).

Разве это не проблема с настройкой размера текста?

 body{ -webkit-text-size-adjust:none; } 

Просто установите манифест:

 android:windowSoftInputMode="adjustPan" 

У меня такая же проблема (на HTC Incredible), и пока не найдено хорошего исправления. Но я заметил, что если вы используете мобильный сайт Google (http://google.com/m), вы не получите этого поведения, я пытаюсь понять, почему так.

Я пробовал все исправления, упомянутые в stackoverflow, которые я мог найти, в том числе в этой теме, и ничего, что я нашел, работает до сих пор.

Одно дерьмовое исправление, которое я нашел, заключается в том, чтобы установить начальную шкалу на 150 (1.5X), а затем масштабировать ваш сайт соответственно, тогда вы также не получите это поведение масштабирования – возможно, потому, что он хочет увеличить масштаб до 1.5X, когда вы Нажмите на текстовый ввод, и если вы уже на этом уровне масштабирования, ничего не происходит? Но, это кажется супер хаки и, вероятно, не является надежным во всех телефонах.

Вот как я решил это:

На всех моих страницах у меня есть:

 <link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:0.75)" href="css/ldpi.css" /> <link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1)" href="css/mdpi.css" /> <link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1.5)" href="css/hdpi.css" /> <meta name="viewport" content="target-densitydpi=device-dpi" /> 

На страницах с полями ввода у меня есть:

 <link rel="stylesheet" media="screen" href="css/mdpi.css" /> <meta name="viewport" content="target-densitydpi=medium-dpi" /> 

Таким образом, я не пользуюсь hdpi для форм, но, по крайней мере, он не увеличивает масштаб

Есть поле int в webview.class mDefaultScale float, исходный код показывает, что при отображении экранной клавиатуры изменится mActualScale. Поэтому проблема mDefaultScale. Вы можете узнать его на сайте grepcode.

 private void displaySoftKeyboard(boolean isTextView) { InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (isTextView) { if (mWebTextView == null) return; imm.showSoftInput(mWebTextView, 0); if (mActualScale < mDefaultScale) { // bring it back to the default scale so that user can enter // text. mInZoomOverview = false; mZoomCenterX = mLastTouchX; mZoomCenterY = mLastTouchY; // do not change text wrap scale so that there is no reflow setNewZoomScale(mDefaultScale, false, false); adjustTextView(false); } } else { // used by plugins imm.showSoftInput(this, 0); } } 

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

http://rickluna.com/wp/2012/02/set-app-scaling-in-phonegap-android/

Добавьте эти строки в источник java приложения.

 appView.getSettings().setSupportZoom(false); appView.getSettings().setUseWideViewPort(false); WebSettings ws = appView.getSettings(); ws.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); appView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); appView.setInitialScale(0); ws.setSupportZoom(false); ws.setBuiltInZoomControls(false); ws.setUseWideViewPort(false); 

Я изменил MEDIUM на FAR, который удерживает экран при первоначальном увеличении 1.0.

Надеюсь, это спасет других людей от поиска

Наконец, я нашел решение для своего реального проекта.

 - MainActivity.java @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView mWebView = (WebView) findViewById(R.id.webview); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { mWebView.setOnFocusChangeListener(new MyOnFocusChangeListener(getScale())); } Log.i(MainActivity.class.getSimpleName(), "getScale: " + getScale()); } /** * Calculate the scale that we need to use manually. * * @return the scale that we need */ private float getScale() { DisplayMetrics display = this.getResources().getDisplayMetrics(); int width = display.widthPixels; Float val = Float.valueOf(width) / Float.valueOf(Constants.PAGE_WIDTH); return val.floatValue(); } - MyOnFocusChangeListener.java public class MyOnFocusChangeListener implements View.OnFocusChangeListener { protected float mScale; public MyOnFocusChangeListener(float scale) { mScale = scale; } /** * Implement this method because we want to apply scale when focus changed. * @param v the View we want to apply scale when focus changed. * @param hasFocus has a focus or not. */ public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { // We must try all cases because mDefaultScale will change on different versions of Android. try { Field defaultScale = WebView.class.getDeclaredField("mDefaultScale"); defaultScale.setAccessible(true); defaultScale.setFloat(v, mScale); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { try { Field zoomManager; zoomManager = WebView.class.getDeclaredField("mZoomManager"); zoomManager.setAccessible(true); Object zoomValue = zoomManager.get(v); Field defaultScale = zoomManager.getType().getDeclaredField("mDefaultScale"); defaultScale.setAccessible(true); defaultScale.setFloat(zoomValue, mScale); } catch (SecurityException e1) { e1.printStackTrace(); } catch (IllegalArgumentException e1) { e.printStackTrace(); } catch (IllegalAccessException e1) { e.printStackTrace(); } catch (NoSuchFieldException e1) { try { Field mProviderField = WebView.class.getDeclaredField("mProvider"); mProviderField.setAccessible(true); Object webviewclassic = mProviderField.get(v); Field zoomManager = webviewclassic.getClass().getDeclaredField("mZoomManager"); zoomManager.setAccessible(true); Object zoomValue = zoomManager.get(webviewclassic); Field defaultScale = zoomManager.getType().getDeclaredField("mDefaultScale"); defaultScale.setAccessible(true); defaultScale.setFloat(zoomValue, mScale); } catch (Exception e2) { e2.printStackTrace(); } } } } } }