如何在Android webview中移除缩放按钮?

17

如何移除WebView中的缩放按钮 enter image description here?当我缩放WebView时,它们会显示出来。我需要拥有缩放控制但没有这些按钮。我正在使用Android 2.3。

我使用了以下代码:

WebView webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setBuiltInZoomControls(false);
webview.getSettings().setJavaScriptEnabled(true);
FrameLayout mContentView = (FrameLayout) getWindow().
        getDecorView().findViewById(android.R.id.content);
final View zoom = webview.getZoomControls();
mContentView.addView(zoom, ZOOM_PARAMS);
zoom.setVisibility(View.GONE);

我们可以在这里讨论吗?http://chat.stackoverflow.com/rooms/10629/agarwal - Shankar Agarwal
@bharath,你能帮我解决这个问题吗? - Subrat nayak.
8个回答

30
getSettings().setBuiltInZoomControls(false);

使用上述代码行来移除缩放按钮。

在API >= 11中,您可以使用:

webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);

更新::: 如果你想要在没有缩放控制的情况下进行缩放,则可以使用下面的代码(从这里复制)

public class Main extends Activity {
  private WebView myWebView;
  private static final FrameLayout.LayoutParams ZOOM_PARAMS =
new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
Gravity.BOTTOM);

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);
    myWebView = (WebView)findViewById(R.id.webView);

    FrameLayout mContentView = (FrameLayout) getWindow().
    getDecorView().findViewById(android.R.id.content);
    final View zoom = myWebView.getZoomControls();
    mContentView.addView(zoom, ZOOM_PARAMS);
    zoom.setVisibility(View.GONE);

    myWebView.loadUrl("http://www.almondmendoza.com");
  }
}

15

在你的AndroidManifest文件中更改这个:

    android:minSdkVersion="8"

变成这样:

    android:minSdkVersion="11"

然后在您的Web视图设置中使用此选项:

getSettings().setBuiltInZoomControls(true);
    getSettings().setDisplayZoomControls(false);

5
如果你想禁用缩放控件,可以使用以下代码:webView.getSettings().setDisplayZoomControls(false);

5

最终我的答案是,在Android 2.3中无法隐藏/移除WebView上的这些按钮。


3
只需要添加这一行代码:
webSettings.setDisplayZoomControls(false);

这个人问了关于Android 2.3的问题,但是这在2.3版本中不可能实现。 - Vahid Amiri

3
请按照以下代码进行操作,它会帮助您。

Main.java

    WebView wv = (WebView) findViewById(R.id.webview1) ;
    WebSettings webSettings = wv.getSettings();
    webSettings.setBuiltInZoomControls(false);
    wv.loadUrl(url);

最好的情况下,这将使缩放控件可用。 - CommonsWare
将布尔值更改为false。 - code_finder

1

通过实现自定义的WebView,并使用反射来获取内置的缩放控件并使它们在API 11(Honeycomb)以下不可见,可以删除缩放按钮。该代码适用于所有Android Nougat及以下版本的API。

public class CustomWebView extends WebView{

    private ZoomButtonsController zoom_controll = null;

    public CustomWebView(Context context) {
        this(context, null);
    }

    public CustomWebView(Context context, AttributeSet attrs) {
        this(context, attrs, android.R.attr.webViewStyle);
    }

    public CustomWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initWebSettings();
    }

    @SuppressLint("NewApi")
    private void initWebSettings() {
        WebSettings webSettings = getSettings();

        webSettings.setSupportZoom(true);
        webSettings.setBuiltInZoomControls(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            webSettings.setAllowContentAccess(true);
            webSettings.setDisplayZoomControls(false);

        } else {
            try {
                Class webview = Class.forName("android.webkit.WebView");
                Method method = webview.getMethod("getZoomButtonsController");
                zoom_controll = (ZoomButtonsController) method.invoke(this, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(zoom_controll != null)
            zoom_controll.getZoomControls().setVisibility(View.GONE);
        return super.onTouchEvent(event);
    }

}

0

这里提供一种解决方案:

    if (ev.getAction() == MotionEvent.ACTION_DOWN ||
        ev.getAction() == MotionEvent.ACTION_POINTER_DOWN ||
        ev.getAction() == MotionEvent.ACTION_POINTER_1_DOWN ||
        ev.getAction() == MotionEvent.ACTION_POINTER_2_DOWN ||
        ev.getAction() == MotionEvent.ACTION_POINTER_3_DOWN) {
    if (multiTouchZoom && !buttonsZoom) {
        if (ev.getPointerCount() > 1) {
            getSettings().setBuiltInZoomControls(true);
            getSettings().setSupportZoom(true);
        } else {
            getSettings().setBuiltInZoomControls(false);
            getSettings().setSupportZoom(false);
        }
    }
}

if (!multiTouchZoom && buttonsZoom) {
    if (getPointerCount(ev) > 1) {
        return true;
    }
}

在你的情况下,multiTouchZoom 是 true,而 buttonsZoom 是 false。
我在这里找到了 在 Android WebView 中启用/禁用缩放,并且它对我有用。

multiTouchZoom和buttonsZoom变量是什么? - jayellos
@jayellos用你的布尔值替换它们。如果你想要多点触控缩放,请将multiTouchZoom替换为true。如果需要显示缩放按钮,请将buttonsZoom替换为true。否则,用false替换。 - Dmitry Zaytsev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接