代码之家  ›  专栏  ›  技术社区  ›  Jim Blackler

WebView:如何在会话之间保留用户的缩放设置?

  •  4
  • Jim Blackler  · 技术社区  · 16 年前

    我的应用程序使用WebView,用户有时会调整缩放级别,使文本变大。但是,当活动关闭且另一个活动启动时,缩放级别设置将丢失。

    我看不到如何在WebView上编程获取和设置缩放级别,有人能建议一种方法吗?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Jorgesys    16 年前

    它是来自grupo reforma的jorge,这是我使用sharedreferences实现的。

    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();     
         }
    

    希望能帮上忙

        2
  •  2
  •   ubzack    14 年前

    Jorge给出的答案是spot on,除了savezoom理想情况下不应调用 finish() (即活动被销毁时)。更好的缩放首选项保存方法是扩展WebView的WebView客户端,并重写 onScaleChanged() . 所以继续Jorge的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());
    }