单击WebView中的表单域时禁用缩放?

tpl*_*ner 17 android zoom webview

如果有类似的问题,我已经浏览了几十页,没有一个有任何答案,所以希望这个会有所不同.

我有一个webview,我不希望视图的缩放从我设置的初始缩放级别改变. 当前改变缩放级别的唯一方法是聚焦文本框.

我需要能够通过Java代码执行此操作,而不是使用视口元标记.

只是因为我没有常见的响应,我的代码中有以下内容禁用缩放和缩放控件:

mWebView.getSettings().setBuiltInZoomControls(false);
mWebView.getSettings().setSupportZoom(false);
Run Code Online (Sandbox Code Playgroud)

我认为一个可能的解决方案是检查在WebView中发生onFocus甚至onClick事件的时间,然后是zoomOut,但我甚至不确定这是否可能?

任何建议,将不胜感激.

Moa*_*oak 22

更新 这个答案写于差不多6年前,从那时起所有新的Android版本,这很可能是过时的.

这件事引起了很大的麻烦,但最终还是得到了解决 setDefaultZoom(ZoomDensity.FAR);

有一两件事是重要的是,onCreateloadUrl在WebSettings之前被调用,否则就引起了强制关闭的情况.这里的ENTIRE代码包括import(适用于新手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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这样可以正常工作,但是如果您在最初扩展应用程序时遇到问题并使用此修复程序:http://uihacker.blogspot.com/2011/01/android-phonegap-scale-webview-to-fit.html那么这个修复停止工作了:(我一直在拉我的头发. (2认同)
  • 这不是公认的答案,这是一种犯罪.如果我可以100次投票,我会.您刚刚为我结束了4小时的故障排除会话.谢谢. (2认同)
  • 确认它不适用于KitKat设备。您还有其他解决方案吗?谢谢。 (2认同)

inc*_*ist 5

我在HTC手机上通过为onScaleChanged添加一个带有空侦听器的WebViewClient来解决这个问题.我的应用程序是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);
}
Run Code Online (Sandbox Code Playgroud)

}

奇怪的是,onScaleChange监听器永远不会被调用 - 通过监听缩放,它会阻止缩放发生.我发现我需要所有其他调用(setSupportZoom,setDefaultZoom,setInitialScale)才能使其工作,并且删除它们中的任何一个都会恢复到旧的错误行为.


小智 5

我遇到了同样的麻烦.我需要找到一种方法来将webview的内容扩展到精确值,一切正常,直到用户开始输入文本.有一些方法适用于相对较新的设备android 4.0+,但在旧的设备上失败.在任何地方都可以使用的唯一方法是将缩放值设置为不是在Java中,而是在视口中设置

<meta name="viewport" content="initial-scale=.80; maximum-scale=.80; minimum-scale=.80;" />
Run Code Online (Sandbox Code Playgroud)

它适用于我测试的每个设备.


tpl*_*ner 0

此问题已通过 HTC 设备上的固件更新得到解决,它(显然)是由 Sense UI 错误地覆盖默认 Android 功能引起的。

很难准确地提供有关此问题何时得到纠正的信息,但是当在具有最新固件的任何 HTC 设备上单击文本框时,我的 Web 应用程序不再缩放。

以下两行代码将禁用 android webview 的“缩放”功能:

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