android - 如何修复 Android 手机 webview 的旋转?

标签 android webview screen orientation

我想弄清楚如何解决 webview 上的方向问题。基本上每次用户在设备上更改方向时,程序都会变白并重新加载整个页面。这需要很长时间。

我希望它像所有其他程序一样工作,只需调整页面大小以适应方向。我已经尝试阅读有关该主题的其他文章,但是当我实现他们的解决方案时,它似乎并没有解决问题。

这是我当前的代码。

package testdev.HelloWebApp;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class HelloWebAppActivity extends Activity {
/** Called when the activity is first created. */
private WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    webView = (WebView)findViewById(R.id.webView);
    WebSettings webSettings =webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webView.setWebViewClient (new HelloWebViewClient());
    webView.loadUrl("http://google.com");

    if (savedInstanceState != null)
      ((WebView)findViewById(R.id.webView)).restoreState(savedInstanceState);

}
private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack())
    {
        webView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
protected void onSaveInstanceState(Bundle outState ){
    ((WebView) findViewById(R.id.webView)).saveState(outState);
}
}

最佳答案

我遇到了同样的问题。当您翻转屏幕时 webView 重新启动的原因(至少在我的情况下)是您总是在 onCreate() 运行时初始化 webView,即使 webView 不为 null。

首先在您的 AndroidManifest.xml 中添加以下内容:

<activity android:configChanges="orientation">

然后,尝试添加一个 if 子句:

...

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //Add this
    if(webView == null){
        webView = (WebView)findViewById(R.id.webView);
        WebSettings webSettings =webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webView.setWebViewClient (new HelloWebViewClient());
        webView.loadUrl("http://google.com");
    }

    if (savedInstanceState != null)
        ((WebView)findViewById(R.id.webView)).restoreState(savedInstanceState);
}

...

关于android - 如何修复 Android 手机 webview 的旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640501/

相关文章:

android - 如何知道在android中上传到服务器的文件百分比

android - 使 Webview 内容适合屏幕

Android WebView 以编程方式清除 Cookies 2017 API 25

Android:基于屏幕尺寸的不同图像

android - 计算屏幕外 map 位置的半径

android - 同步服务运行后刷新 FragmentActivity 中的 fragment

android - MediaPlayer 的状态变化监听器

android - 如何在 webview android 中调整 youtube 视频的大小?

Android:启动画面和网页 View

java - 相对布局 android Loopable