2011-06-09 44 views

回答

29

你有兩個選擇:

在你的清單,把:

<activity android:name=".HelloAndroid" 
    android:label="@string/app_name" 
    android:configChanges="orientation"> 

而且,在代碼中,覆蓋onConfigurationChanged

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.main);  
    // TODO 
} 

下面是關於它的好tutorial

+0

@ferostar待辦事項配置更改報告設備方向更改或ui方向更改?第一個看起來很清楚,因爲它使用了傳感器管理器。我不確定第二個。 – Mark13426 2016-10-26 19:19:58

+0

從API級別13開始,清單configChanges屬性需要爲:「orientation | screenSize」。請參閱此答案以獲取更多信息:https://stackoverflow.com/questions/5620033/onconfigurationchanged-not-getting-called – user885232 2017-10-20 16:18:18

15

在您的活動中,您可以重寫此方法來偵聽方向更改並實現自己的代碼。

public void onConfigurationChanged (Configuration newConfig) 

Configuration類具有int常量ORIENTATION_LANDSCAPEORIENTATION_PORTRAIT,存在對於可以檢查NEWCONFIG這樣的:

super.onConfigurationChanged(NEWCONFIG);

int orientation=newConfig.orientation; 

switch(orientation) { 

case Configuration.ORIENTATION_LANDSCAPE: 

//to do something 
break; 

case Configuration.ORIENTATION_PORTRAIT: 

//to do something 
break; 

} 
+3

Huang - 您的建議運行良好,只需進行一次編輯。您需要在方法的開頭添加'super.onConfigurationChanged(newConfig);'以避免導致異常。 – 2011-11-21 20:11:50

+0

是的,超級電話是必要的。在eclipse中,這行會自動添加。這就是我省略的原因。 – Huang 2011-11-22 00:01:48

+1

從未呼籲:S。即使我把'android:configChanges =「orientation」'放在清單 – IgniteCoders 2016-11-17 01:57:55

4

由於Android 3.2的,你還需要添加 「屏幕尺寸」 在androidmanifest特定活動

所以XML格式的活動宣言將成爲

<activity android:name=".ExampleActivity" 
    android:label="@string/app_name" 
    android:configChanges="orientation|screenSize">