设置webview的最小缩放级别(Android)
我有一个奇怪的问题,我想用一个网络视图来显示一个图像,并使其可缩放。我的活动中有以下方法:设置webview的最小缩放级别(Android),android,webview,zooming,minimum,Android,Webview,Zooming,Minimum,我有一个奇怪的问题,我想用一个网络视图来显示一个图像,并使其可缩放。我的活动中有以下方法: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_manual); WebView webView = (WebView)findViewById(R.id.webVi
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manual);
WebView webView = (WebView)findViewById(R.id.webView);
webView.loadUrl("file:///android_res/drawable/some_image.jpg");
webView.setInitialScale(getScale());
webView.getSettings().setBuiltInZoomControls(true);
}
getScale()
方法计算一个可以与webView.setInitialScale()
一起使用的比例,以将图像精确缩放到全屏宽度,并且可以正常工作。内置缩放控件在某种程度上也可以工作,但:
放大图像后,我无法缩小到初始比例,因为最小比例大于初始比例
使用WebSettings设置缩放密度没有任何帮助,我认为即使在我的手机上设置了,在其他手机上也不会
我还尝试了:我制作了一个HTML页面,其中包含作为body元素唯一子元素的图像。我将它的宽度设置为100%,并以这种方式进行缩放。但是,如果我再次放大,图像会立即调整大小以再次适应屏幕宽度
我找到了一些答案,但没有一个真正有用:
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setDefaultZoom(ZoomDensity.FAR);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
一个解决方案提到使用反射来更改WebView类以忽略限制,但我担心这可能会破坏我在一些旧版本Android上的应用程序。我必须与API级别为9的设备兼容。我想我找到了一个解决方案,可以解决大多数情况,只要我们只想加载一个映像。这是一种变通方法,在调整图像大小时会丢失一些图像细节。然而,即使不是所有的设备,它也应该能在大多数设备上工作 我采用了将图像嵌入基本HTML页面的方法,并填充了
属性,该属性无法指向图像文件
在HTML代码中需要标记
,并且必须在其内容属性中包含目标密度dpi=device dpi
。否则,图像的大小可能仍然与视口不匹配
注意:您还可以在视口
标记内指定最小比例
,这确实影响了我的webview。糟糕的是:至少在我的Galaxy S3 mini运行的Jelly Bean 4.1.2上,小于1.0的最小比例没有效果。我想我找到了一个解决方案,可以解决大多数类似情况,只要我们只想加载一张图像。这是一种变通方法,在调整图像大小时会丢失一些图像细节。然而,即使不是所有的设备,它也应该能在大多数设备上工作
我采用了将图像嵌入基本HTML页面的方法,并填充了属性,该属性无法指向图像文件
在HTML代码中需要标记
,并且必须在其内容属性中包含目标密度dpi=device dpi
。否则,图像的大小可能仍然与视口不匹配
注意:您还可以在视口
标记内指定最小比例
,这确实影响了我的webview。不好的是:至少在我的Galaxy S3 mini running Jelly Bean 4.1.2上,小于1.0的最小刻度没有效果。可能这就是你正在搜索的
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manual);
WebView webView = (WebView)findViewById(R.id.webView);
webView.loadDataWithBaseURL("file:///android_res/", generatePage(), "text/html", "utf-8", null);
webView.getSettings().setBuiltInZoomControls(true);
}
也许这就是你正在寻找的
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manual);
WebView webView = (WebView)findViewById(R.id.webView);
webView.loadDataWithBaseURL("file:///android_res/", generatePage(), "text/html", "utf-8", null);
webView.getSettings().setBuiltInZoomControls(true);
}
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(true);
settings.setUseWideViewPort(true);
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);