WebView: как сохранить настройки масштабирования пользователя между сеансами? - PullRequest
4 голосов
/ 02 июня 2010

Мое приложение использует WebView, и пользователи иногда настраивают уровень масштабирования, чтобы увеличить размер текста. Однако настройка уровня масштабирования теряется, когда действие закрывается и начинается другое.

Я не вижу, как программно получить и установить уровень масштабирования в WebView. Кто-нибудь может предложить способ, которым это можно сделать?

Ответы [ 3 ]

6 голосов
/ 03 июня 2010

это я, Хорхе из 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();     
     }

Надеюсь, это поможет

2 голосов
/ 17 февраля 2012

Ответ, который дал Хорхе, точен, за исключением того, что в идеале SaveZoom не должен вызываться на finish() (то есть когда действие уничтожается). Лучшим подходом к экономии при масштабировании будет расширение WebViewClient WebView и переопределение 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());
}
1 голос
/ 02 июня 2010

Возможно, вы могли бы попробовать:

http://d.android.com/reference/android/webkit/WebSettings.html#setDefaultZoom(android.webkit.WebSettings.ZoomDensity)

&

http://d.android.com/reference/android/webkit/WebSettings.html#getDefaultZoom()

Я сам не пробовал, но похоже, что это может сработать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...