如何检测方向变化但让android处理它们?

时间:2016-08-17 09:56:36

标签: android screen-orientation android-lifecycle oncreate android-orientation

我有一个与此非常类似的问题:Android - ActionBar not resizing with onConfigurationChanged ( AppCompat )

我需要让android处理方向更改,因为我想重新创建活动。

但是,我还需要检测何时产生了方向变化。

这两项综合需求是否能够立即实现?

1 个答案:

答案 0 :(得分:4)

检测活动的轮播而不干扰其课程<​​/ strong>,您可以执行以下操作:

@Override
public void onConfigurationChanged(Configuration config) {
    super.onConfigurationChanged(config);
    // Check for the rotation
    if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "LANDSCAPE", Toast.LENGTH_SHORT).show();
    } else if (config.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "PORTRAIT", Toast.LENGTH_SHORT).show();
    }
}

此外,您需要确保清单上的,您的活动允许使用configChanges进行轮换

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

重要:从Android 3.2及更高版本开始(API 13+),当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。 如果要在针对特定API级别(13+)进行开发时由于方向更改而阻止运行时重新启动,请确保声明:android:configChanges="orientation|screenSize"

- // -

编辑

使用configChanges属性时,在配置更改时不会重新创建您的活动

More can be found on Google's Documentation here

  

<强> 机器人:configChanges

     

列出活动将自行处理的配置更改。什么时候   在运行时发生配置更改,活动将关闭   默认情况下重新启动,但使用此声明配置   属性将阻止活动重新启动。相反,   活动仍在运行,其onConfigurationChanged()方法是   调用。

您可以做的是用标志控制旋转,如果调用onConfigurationChanged(),您可以自己调用活动onCreate()。如果不是,则仅在首次实例化Activity时调用onCreate()