You can take the view you get from WebView.getZoomControls() and add it as a child to a layout beside (or on top of) the webview. Unfortunately it's hacky, getZoomControls is deprecated, and you don't get pinch zoom unless you call WebSettings.setBuildInZoomControls(true) (which will add a SECOND zoom controls view, which you don't want), but it seems to work. Here's my code to do this, for what it's worth:
Layout xml:
<RelativeLayout android:id="@+id/rl"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView android:id="@+id/wv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<FrameLayout android:id="@+id/wv_zoom_fl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" />
</RelativeLayout>
Java (within an activity):
WebView wv = (WebView)findViewById(R.id.wv);
FrameLayout zoomfl = (FrameLayout)findViewById(R.id.wv_zoom_fl);
zoomfl.removeAllViews();
zoomfl.addView(wv.getZoomControls());
Now to have the zoom disappear, you can set the visibility of R.id.rl (which contains the WebView and the FrameLayout containing the zoom conrols) to RelativeLayout.GONE.
For an unhacky solution: if your minimum Api is set to level 11 (which is 3.0 Honeycomb, so unfortunately this is unlikely), you can use:
http://developer.android.com/reference/android/webkit/WebSettings.html#setDisplayZoomControls(boolean)