Android:听取方向改变?

Ski*_*zit 26 android

我如何在Android中听取方向更改?并在用户切换到横向时执行某些操作?

fer*_*tar 46

你有几个选择:

在你的清单中,放:

<activity android:name=".HelloAndroid"
    android:label="@string/app_name"
    android:configChanges="orientation">
Run Code Online (Sandbox Code Playgroud)

并且,在代码中,重写onConfigurationChanged

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

    int newOrientation = newConfig.orientation;

    if (newOrientation == Configuration.ORIENTATION_LANDSCAPE) {
      // Do certain things when the user has switched to landscape.    
    }   
}
Run Code Online (Sandbox Code Playgroud)

这是一个很好的教程.

  • 从 API 级别 13 起,清单 configChanges 属性需要是:“orientation|screenSize”。有关更多信息,请参阅此答案:/sf/ask/393402341/ (3认同)

Hua*_*ang 17

在您的活动中,您可以覆盖此方法以收听Orientation Change并实现您自己的代码.

public void onConfigurationChanged (Configuration newConfig)
Run Code Online (Sandbox Code Playgroud)

Configuration班有一个整型常量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;

}
Run Code Online (Sandbox Code Playgroud)

  • 黄 - 你的建议很好,有一个编辑.你需要在方法的开头添加`super.onConfigurationChanged(newConfig);`以避免引发异常. (4认同)

Zai*_*Ali 5

Android 3.2开始,您还需要在androidmanifest中为特定活动添加" screenSize "

所以xml中的活动声明将成为

<activity android:name=".ExampleActivity"
    android:label="@string/app_name"
    android:configChanges="orientation|screenSize">
Run Code Online (Sandbox Code Playgroud)