誰がリフレクションを使用するよりも別の解決策が出ているように思わないので - 私はこの時点でいずれかの選択肢を認識していないよ - 私は方法を示して迅速なコードスニペットを書きましたズームイン動作の上限をバイパスします。
以下のコードはICSとHoneycombでのみ動作しますが、内部動作が同じZoomManager
クラスに依存しているかどうかを検査するためのタブレットは現在ありません。 Gingerbread、Froyo、およびEclairはすべて、WebView
クラスで直接的にズーム機能を実装しているようです。以下の例では、これらのオペレーティングシステムを考慮に入れるためにコードを追加するのはかなり簡単です。
// just set an Activity's content view to a single WebView for this test
WebView mWebview = new WebView(this);
setContentView(mWebview);
// retrieve the ZoomManager from the WebView
Class<?> webViewClass = mWebview.getClass();
Field mZoomManagerField = webViewClass.getDeclaredField("mZoomManager");
mZoomManagerField.setAccessible(true);
Object mZoomManagerInstance = mZoomManagerField.get(mWebview);
// modify the "default max zoom scale" value, which controls the upper limit
// and set it to something very large; e.g. Float.MAX_VALUE
Class<?> zoomManagerClass = Class.forName("android.webkit.ZoomManager");
Field mDefaultMaxZoomScaleField = zoomManagerClass.getDeclaredField("mDefaultMaxZoomScale");
mDefaultMaxZoomScaleField.setAccessible(true);
mDefaultMaxZoomScaleField.set(mZoomManagerInstance, Float.MAX_VALUE);
これは、一般的なまたは特定のAndroidのフレーバーで動作する必要がありますか? 'WebView'のズームインの実装が、異なるリリースよりもかなり変更されているので私は尋ねています。この「制限」を回避するためにリフレクションを使用できるはずですが、さまざまなデバイス/ OSバージョンで動作させたい場合は、さまざまなケースの中から自分を準備してください。 –
それはICS(4.0.3)で動作するように必要です。好ましくはタブレットデバイスとスマートフォンの両方に表示されます。私は現在、Asus EEEトランスプライムタブレットで自分のアプリケーションをテストしています。でも、私のアプリはSamsung Galaxy SIIのようなデバイスでも動作するようにしたい。すべてのAndroid搭載端末で機能する単一のソリューションはありませんか? – Wottah