[英]android:webView handling orientation changes
我想防止每次更改方向時webview都重新加載頁面。
我遵循了以下教程:
但它會調用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" />
仍然沒有用。 誰能幫助我解決方案:
我也嘗試過:
您尚未將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.