標籤:
ps:雖然現在的app一般都是固定一個螢幕方向,但是還是有必要瞭解下螢幕切換的方法和注意。
一 固定橫豎屏
androidmainfest.xml中設定activoty屬性:android:screenOration="land-space/portaie" (橫向/豎向)
二 自動切換
1 androidmainfest.xml中設定activity屬性:android:configChanges="orientation|screensize|keyboardHidden" (3.0以後需要同時設定screensize)
;由於橫豎螢幕切換,activity會銷毀,建立一個activity
注意:
重建之前需要儲存資料:onRetainNoNConfigurationInstance()
onCreate中擷取之前儲存的資料getLastNoNConfigurationInstance()
view相關,context上下文相關的無法儲存 ,因為頁面已經重新繪製了。
相關代碼:
重寫Activity.onRetainNonConfigurationInstance(),使用者橫豎屏切換前儲存資料
@Override
public Object onRetainNonConfigurationInstance() {
final MyDataObject data = collectMyLoadedData();
return data;
}
在onCreate()函數中調用getLastNonConfigurationInstance(),擷取onRetainNonConfigurationInstance()儲存的資料
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
if (data == null) {
data = loadMyData();
}
...
}
2 當然可以做到,橫豎屏切換的時候,頁面隨著改動,而不是銷毀
後台代碼實現activity的onConfigrationChanges()
@Override
public void onConfigurationChanged (Configuration newConfig){
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
//注意,這裡刪除了init(),否則又初始化了,狀態就丟失
findViews();
setListensers();
}
注意:
需要layout下設定同名的layout-land.xml 和layout-port.xml布局,其中控制項的個數和名稱都必須一樣,橫豎屏會自動匹配
Android橫豎屏切換