簡體   English   中英

android:webView處理方向更改

[英]android:webView handling orientation changes

我想防止每次更改方向時webview都重新加載頁面。

我遵循了以下教程:

http://www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-screen-orientation-change

但它會調用onCreate()方法eveytime並再次獲取頁面。

DisplayResult.java:

public class DisplayResult extends AppCompatActivity
{
protected FrameLayout webViewPlaceholder;


protected WebView webView;
protected Uri url;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display_result);
    url = Uri.parse(getIntent().getStringExtra("Url"));
    initUI();
    Toast.makeText(DisplayResult.this ,"Oncreate",Toast.LENGTH_SHORT).show();
}


protected void initUI()
{
    webViewPlaceholder =(FrameLayout)findViewById(R.id.webViewPlaceholder);
    if(webView==null)
    {

        //webView = (WebView) findViewById(R.id.webview);
        webView = new WebView(this);
        // webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);
        //webView.getSettings().setTextZoom(0);
        webView.setWebViewClient(new Callback());
        webView.loadUrl(url.toString());

    }
    webViewPlaceholder.addView(webView);
}

private class Callback extends WebViewClient {
    MaterialDialog m ;

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return(false);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap facIcon) {

        m=new MaterialDialog.Builder(DisplayResult.this)
                .title("Fetching Result")
                .content("Please wait...")
                .progress(true,0)

                .show();
    }
    @Override
    public void onPageFinished(WebView view, String url){
        m.cancel();
    }
}

@Override
protected void onSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);

    webView.saveState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    webView.restoreState(savedInstanceState);
}

@Override
public void onConfigurationChanged(Configuration newConfig){
    if(webView==null)
    {
        webViewPlaceholder.removeView(webView);
    }
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.display_result);
    url = Uri.parse(getIntent().getStringExtra("Url"));
    initUI();
}

}

和我的布局文件:

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<FrameLayout
    android:id="@+id/webViewPlaceholder"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"></FrameLayout>

</LinearLayout>

我還添加了清單文件:

<activity
        android:name=".DisplayResult"
        android:configChanges="keyboard|keyboardHidden|orientation"
        android:label="@string/display"
        android:parentActivityName=".MainActivity" />

仍然沒有用。 誰能幫助我解決方案:

我也嘗試過:

Android Webview處理方向不起作用

您尚未將screenSize添加到configChanges

Android文檔

一些設備配置可以在運行時更改(例如屏幕方向,鍵盤可用性和語言)。 發生此類更改時,Android重新啟動正在運行的Activity(先調用onDestroy()再調用onCreate() )。 重新啟動行為旨在通過自動為應用程序重新加載與新設備配置匹配的替代資源來幫助您的應用程序適應新配置。

和:

注意:從Android 3.2(API級別13)開始,當設備在縱向和橫向之間切換時,“屏幕尺寸”也會更改。 因此,如果要防止在開發API級別13或更高級別時(如minSdkVersion和targetSdkVersion屬性所聲明的),由於方向更改而導致運行時重新啟動,則除了“ orientation”值外,還必須包括“ screenSize”值。 也就是說,您必須聲明android:configChanges="orientation|screenSize 。但是,如果您的應用程序的目標是API級別12或更低,那么您的活動始終會自行處理此配置更改(即使在以下環境下運行,此配置更改也不會重新啟動您的活動Android 3.2或更高版本的設備)。

考慮到這一點,為了防止每次更改方向時都調用onCreate() ,您必須將android:configChanges="orientation|screenSize"到AndroidManifest中。

@Override
public void onConfigurationChanged(Configuration newConfig){
if(webView==null)
{
    webViewPlaceholder.removeView(webView);
}
super.onConfigurationChanged(newConfig);
setContentView(R.layout.display_result);
url = Uri.parse(getIntent().getStringExtra("Url"));
initUI();
}

替換為

@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM