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);
有一两件事是重要的是,onCreate与loadUrl在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)
我在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)
它适用于我测试的每个设备.
此问题已通过 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)
| 归档时间: |
|
| 查看次数: |
18992 次 |
| 最近记录: |