【问题标题】:Android WebView re-rendering UI after changing orientation.Android WebView 在更改方向后重新渲染 UI。
【发布时间】:2013-11-15 14:06:25
【问题描述】:

在我的应用程序中,我使用setRequestedOrientation() 在按钮单击时设置应用程序的方向,我的应用程序有一个显示本地网页的 web 视图。

我正在使用下面链接中提到的解决方案,以在方向改变时停止重新加载页面。
http://www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-screen-orientation-change/

唯一的区别是我的活动中没有onSaveInstanceStateonRestoreInstanceState

在我的情况下发生的情况是,当我更改方向时,我的 Web 视图不会重新加载,但它只是在更改方向时重新呈现 UI。

它首先显示 UI,然后显示白色空白屏幕几秒钟,然后再次显示 UI。

我该如何解决?

【问题讨论】:

    标签: android webview rendering


    【解决方案1】:

    曾几何时,我使用了他们的实现,但是在阅读了 Android 文档后,我意识到他们的大部分代码都是毫无意义的,因为注册配置更改(在清单中)意味着您的活动不会因为它而被破坏通常是。

    长话短说,您不需要使用FrameLayout 作为webView 的容器,您可能不需要onConfigurationChanged 等。如果有时间我会发布一些代码作为示例。

    现在,请确保清单文件中包含以下内容

    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    

    而不是

    android:configChanges="keyboard|keyboardHidden|orientation"
    

    因为在方向改变时设备可能会改变屏幕尺寸

    编辑这是我所做的(从我的一个项目中略读,所以我可能遗漏了一些小细节)

    在 AndroidManifest.xml 中

    <activity android:name=".Activities.WebWrapperActivity"
              android:theme="@android:style/Theme.NoTitleBar"
              android:configChanges="keyboard|keyboardHidden|orientation|screenSize"/>
    

    web_wrapper_activity_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
    
        <WebView android:id="@+id/web_wrapper_activity_web_view"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:scrollbarStyle="outsideOverlay"/>
    </LinearLayout>
    

    活动(或其中的一部分)

    public class WebWrapperActivity extends Activity {
        private WebView _webView;
    
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.web_wrapper_activity_layout);
    
            init();
        }
    
        private void init() {
            _webView = (WebView) findViewById(R.id.web_wrapper_activity_web_view);
            _webView.setScrollbarFadingEnabled(true);
            _webView.getSettings().setLoadsImagesAutomatically(true);
            _webView.getSettings().setJavaScriptEnabled(true);
    
            _webView.getSettings().setAllowFileAccess(true);
            _webView.getSettings().setSavePassword(false);
            _webView.getSettings().setPluginState(WebSettings.PluginState.ON);
    
            _webView.loadUrl(“http://www.google.com”);
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            _webView.saveState(outState);
        }
    }
    

    正如我之前提到的,如果您的 webView 是 Activity 中的唯一视图,您可能不需要 onConfigurationChanged

    如果您有任何问题,请告诉我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2021-12-18
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多