我的應用程序有一個網頁視圖和LinerLayout裏面的一些按鈕。的方向改變替換佈局
的問題是,我想要的按鈕上在縱向模式下底部和左側橫向模式而維持的WebView它的狀態。因爲它強制將刷新網頁視圖活動的娛樂
兩個不同的佈局不起作用。現在我用的android :在活動標籤configChanges =「方向」這樣的WebView不會得到方向改變刷新。
反正是有更換的屏幕模式改變按鈕的佈局?
肖像模式
風景模式
我的應用程序有一個網頁視圖和LinerLayout裏面的一些按鈕。的方向改變替換佈局
的問題是,我想要的按鈕上在縱向模式下底部和左側橫向模式而維持的WebView它的狀態。因爲它強制將刷新網頁視圖活動的娛樂
兩個不同的佈局不起作用。現在我用的android :在活動標籤configChanges =「方向」這樣的WebView不會得到方向改變刷新。
反正是有更換的屏幕模式改變按鈕的佈局?
肖像模式
風景模式
我測試了片段,但處理片段使事情變得更加複雜,片段本身需要保存和恢復,這可能無法在具有javascript狀態的webview中工作,所以我搜索了更多,並找到一個不錯的文章的地方,並進行一些修改我來到了一個解決方案,我建議:
首先,添加android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
因此應用程序處理配置的變化,而不是機器人。
作出橫向和縱向兩種不同的佈局。在兩種佈局而不是網頁視圖地方它充當web視圖一個佔位符的FrameLayout。
定義initUI方法這樣,把一切在這個方法中的有關UI初始化:
public void initui()
{
setContentView(R.layout.main);
if (wv == null) wv = new WebView(this);
((LinearLayout)findViewById(R.id.webviewPlace)).addView(wv);
findViewById(R.id.home).setOnClickListener(this);
}
如果網頁流量不存在,但它會被創建和setContentView(R.layout.main)
後它會被添加到佈局。在此之後,您需要的任何其他UI自定義。
和onConfigurationChanged
:
@Override
public void onConfigurationChanged(Configuration newConfig)
{
((LinearLayout)findViewById(R.id.webviewPlace)).removeAllViews();
super.onConfigurationChanged(newConfig);
initUI();
}
在onConfigChange
web視圖從舊佔位符刪除,initui
將被調用,將其重新添加到新的佈局。
在oncreate()
呼叫initui()
所以用戶界面將會被初始化首次。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
initUI()
}
我希望這會對某人有所幫助。
把這點layout-land
的佈局,你想要的景觀。
的想法是,你真的不應該使用configChange="orientation"
,因爲它有它的缺點。你可以找到詳細的帖子here。如果你想改變你的佈局,你應該手動處理你的狀態。當然,你可以編程,但如果你想用xml來做到這一點。你可以用碎片維護你的webView。
讓你的看法相對佈局。當方向改變時,只需調整代碼中每個視圖的佈局參數。 有你的按鈕包含在一個線性佈局
如..
肖像
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
buttonLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
buttonLinearLayout.setLayoutParams(lp);
LayoutParams webParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lp.addRule(RelativeLayout.ABOVE, R.id.buttons);
webView.setLayoutParams(webParams);
景觀
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
buttonLinearLayout.setOrientation(LinearLayout.VERTICAL);
buttonLinearLayout.setLayoutParams(lp);
LayoutParams webParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lp.addRule(RelativeLayout.TO_RIGHT_OF, R.id.buttons);
webView.setLayoutParams(webParams);
確保您使用的LayoutParams是RelativeLayout參數(總是使用Layoutparams的視圖的父)
嘗試使用此代碼:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.activity_splash);
}
美麗!!!!!! THKS –
您可以添加值 - (配置你需要 - 如土地,肖像)文件夾下的資源,並提到你需要爲這個配置的佈局。它是爲就那麼簡單。
如果您正在使用android:configChanges="orientation|screenSize"
在清單請簽出以下鏈接瞭解詳細信息 - http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
,它忽略了「佈局土地」的XML。如果您創建一個不同的XML景觀不使用android:configChanges="orientation|screenSize"
標籤中體現這一活動。
我說,那是行不通的。它重新創建視圖並刷新web視圖。 android:configChanges =「orientation」可以防止這種行爲。 – Ali
我閱讀了關於碎片的內容,但不知道它是如何工作的!它在Android 2.2中工作? – Ali
使用supportv4庫,是的。在許多現實生活中應用片段被使用。它取決於你什麼時候瞭解它。另一種解決方案將幫助你,它不需要碎片。但是如果您想了解片段,可以在NewProject> MasterDetailedFlow或Viewpager模板中看到該模板。 – wtsang02