我的應用使用WebView,用戶有時會調整縮放級別以使文字變大。但是,當活動關閉並且另一個開始時,縮放級別設置會丟失。WebView:如何在會話中保留用戶的縮放設置?
我看不到如何獲取和設置WebView的編程縮放級別,任何人都可以提出一種方法,這可以做到?
我的應用使用WebView,用戶有時會調整縮放級別以使文字變大。但是,當活動關閉並且另一個開始時,縮放級別設置會丟失。WebView:如何在會話中保留用戶的縮放設置?
我看不到如何獲取和設置WebView的編程縮放級別,任何人都可以提出一種方法,這可以做到?
它我豪爾赫Grupo Reforma,這是我使用SharedPreferences執行的。
static final String PREFS_Zoom = "PREFS_Zoom";
private String zoomlevel;
private int Default_zoomlevel=100;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.webview);
GetZoom();
mWebView.setInitialScale(Default_zoomlevel);
FrameLayout mContentView = (FrameLayout) getWindow().getDecorView().findViewById(android.R.id.content);
View zoom = mWebView.getZoomControls();
mContentView.addView(zoom, ZOOM_PARAMS);
zoom.setVisibility(View.VISIBLE);
WebSettings webSettings = mWebView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(true);
mWebView.loadUrl("http://www.elnorte.com");
}
private void GetZoom(){
try{
SharedPreferences settings = getSharedPreferences(PREFS_Zoom,0);
zoomlevel = settings.getString("zoom_level","");
if (zoomlevel.length() >0)
Default_zoomlevel = Integer.parseInt(zoomlevel);
else
Default_zoomlevel =100;
}catch(Exception ex){
Log.e("******ZOOM ! ", "Exception GetZoom() ::"+ex.getMessage());
}
}
private void SaveZoom(){
try{
SharedPreferences settings = getSharedPreferences(PREFS_Zoom,0);
SharedPreferences.Editor editor = settings.edit();
Default_zoomlevel = (int) (mWebView.getScale() *100);
editor.putString("zoom_level",""+ Default_zoomlevel);
editor.commit();
}catch(Exception ex){
Log.e("******ZOOM ! ", "Exception SaveZoom() ::"+ex.getMessage());
}
}
public void finish() {
SaveZoom();
super.finish();
}
我希望這幫助
或許你可以嘗試:
&
http://d.android.com/reference/android/webkit/WebSettings.html#getDefaultZoom()
我還沒有嘗試過自己,但看起來像它可能來自工作
好點,謝謝。 – 2010-06-03 07:32:11
豪爾赫給出的答案是當場上,除了SaveZoom理想不應finish()
被調用(這是當活動被銷燬)。更好的縮放喜好保存方法是擴展WebView的WebViewClient,並覆蓋onScaleChanged()
。所以繼續豪爾赫的onCreate方法:
public void onCreate(Bundle savedInstanceState)
{
....
class MyWebViewClient extends WebViewClient
{
@Override
public void onScaleChanged(WebView wv, float oldScale, float newScale)
{
SaveZoom();
}
}
mWebView.setWebViewClient(new MyWebViewClient());
}
問題:onScaleChanged在通過多點觸摸手勢(Android bug)縮放時未被調用。 – 2012-07-06 13:19:03
看起來很完美Jorge。 – 2010-06-03 07:31:22
可以使用'editor.putInt()'和'editor.getInt()',而不是將其存儲爲字符串並將其解析爲整數。由於這些值存儲在一個XML中 - 它可能自己解析等。 – Swaroop 2011-10-11 05:10:39