Android 在Web视图中单击表单字段时是否禁用缩放?
如果有类似的问题,我已经看了几十页,没有一页有任何答案,所以希望这一页会有所不同 我有一个网络视图,我不希望视图的缩放从我设置的初始缩放级别更改当前唯一改变缩放级别的是文本框聚焦时 我需要能够通过Java代码做到这一点,而不是使用viewport元标记 为了避免出现常见的响应,我在代码中使用了以下选项来禁用缩放和缩放控件:Android 在Web视图中单击表单字段时是否禁用缩放?,android,webview,zooming,Android,Webview,Zooming,如果有类似的问题,我已经看了几十页,没有一页有任何答案,所以希望这一页会有所不同 我有一个网络视图,我不希望视图的缩放从我设置的初始缩放级别更改当前唯一改变缩放级别的是文本框聚焦时 我需要能够通过Java代码做到这一点,而不是使用viewport元标记 为了避免出现常见的响应,我在代码中使用了以下选项来禁用缩放和缩放控件: mWebView.getSettings().setBuiltInZoomControls(false); mWebView.getSettings().setSupport
mWebView.getSettings().setBuiltInZoomControls(false);
mWebView.getSettings().setSupportZoom(false);
我认为一个可能的解决方案是检查WebView中何时发生onFocus甚至onClick事件,然后再进行zoomOut,但我甚至不确定这是否可行
如果您有任何建议,我们将不胜感激。您是否尝试禁用“用户在视口中可伸缩”标记?不确定这对你是否有效,但对我有效。我不需要在java方面做任何事情
<meta name="viewport" content="user-scalable=no, width=device-width" />
网络视图有一个特殊的“东西”,我认为它会在这里引发许多问题和答案。所发生的事情是,当加载URL时,默认的Android浏览器会通过处理此问题的意图启动。缩放是在该浏览器中进行的,而不是在您的网络视图中 解决方案:您需要添加一个通知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"
/>
<meta name="viewport" content="initial-scale=.80; maximum-scale=.80; minimum-scale=.80;" />
这段代码禁用了运行Android 2.2的HTC Desire上的缩放功能。点击HTML输入字段没有什么区别
WebView/HelloWebViewClient的整个主题以及正确处理“后退”按钮的重要提示都记录在中。任何使用WebView的人都必须阅读它。我相信您可以使用
WebView.setInitialScale
方法设置缩放级别。它采用int作为刻度,所以我想您可能希望执行类似于myWebView.setInitialScale(100)
的操作 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);
我也遇到过这个问题,我是这样解决的:
myWebview.getSettings().setDefaultZoom(ZoomDensity.FAR);
它在Sumsung Galaxy选项卡上正常运行。我希望这会对您有所帮助。我在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);
}
}
奇怪的是,onScaleChange侦听器从未被调用——通过侦听缩放,它阻止了缩放的发生。我发现我需要所有其他调用(setSupportZoom、setDefaultZoom、setInitialScale)才能使其正常工作,删除任何调用都会恢复到旧的错误行为。更新这个答案是大约6年前写的,从那时起,所有新的android版本都出现了,很可能已经过时
这件事引起了极大的头痛,但最终由于setDefaultZoom(ZoomDensity.FAR)得以解决代码>
重要的一点是,onCreate
和loadUrl
在Web设置之前被调用,否则会导致强制关闭的情况。这里是完整的代码,包括导入(对于Java新手用户)
我也有同样的问题。我需要找到一种方法将webview的内容缩放到精确的值,在用户开始输入文本之前,一切都很正常。有些方法适用于相对较新的android 4.0+设备,但在旧设备上失败。在任何地方都有效的唯一方法是不在Java中设置缩放值,而是像这样在视口中设置缩放值
<?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"
/>
<meta name="viewport" content="initial-scale=.80; maximum-scale=.80; minimum-scale=.80;" />
它可以在我测试的每一台设备上运行。这对我来说也很头疼,但幸运的是我找到了这篇文章:
在css文件中将输入元素中文本的字体大小设置为16px(或更大)
input {
font-size: 16px;
}
这是一种黑客行为,但如果没有其他办法奏效的话……请注意,这似乎只发生在HTC设备上(难以置信,EVO)。该应用程序在模拟器和3台摩托罗拉Android设备(Droid X、Droid Pro、Original Droid、Droid 2)上运行良好。我也面临同样的问题。我尝试了不同的WebSettings组合,但似乎没有一个能按我们想要的方式工作。顺便说一句@evolve,这也会发生在三星Galaxy标签上,所以不仅仅是HTC。@mdelmo如果您添加一个视口标签,您应该能够让应用程序在Galaxy上工作,我目前只有HTC设备有问题。@evolve,谢谢您的回答,但是我的网页缩放设置如下:setLoadWithOverviewMode=true;setUseWideViewPort=true;setLayoutAlgorithm=LayoutAlgorithm.NORMAL;setSupportZoom=false。当点击文本输入时,它仍然会放大。@mdelolmo,你试过webview.setInitialScale(100)吗?根据对他的问题的评论,我想@evolve试过,但我会自己试一下。这个问题仍然会发生在HTC设备(任何使用Sense UI用户界面的设备)上。我一直在搜索后退按钮问题。非常感谢:)对不起,我不是有意粗鲁,但你真的理解这个问题吗?我的意思是,问题不仅仅是“禁用缩放”。这是为了避免某些行为,当用户按下html输入字段时,某些设备(主要是HTC)会自动缩放到100%。在您给出的示例中,这不会发生,因为缩放在开始时已经是100%。我正在尝试实现这一点,如果它解决了我的问题,我会告诉您。