如何检测设备何时从纵向模式切换到横向模式?

时间:2013-08-19 19:33:48

标签: android screen-orientation orientation-changes

我有一个应用程序,显示活动中的全屏位图。为了提供快速加载时间,我将它们加载到内存中。但是当屏幕改变方向时,我想清除缓存,以便再次使用适合新维度的位图填充它。唯一的问题是,为了做到这一点,我需要检测何时发生方向变化。有谁知道如何检测到这个?

4 个答案:

答案 0 :(得分:23)

请参阅官方文档http://developer.android.com/guide/topics/resources/runtime-changes.html

更改它实际上会创建一个新视图,并且将再次调用onCreate。

此外,您可以通过

进行检查
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

答案 1 :(得分:4)

您可以检查onSavedInstanceState方法中的onCreate,如果它不为空则表示这是配置更改。

答案 2 :(得分:3)

另一种方法是使用OrientationEventListener

可以像这样使用:

dependencies {

    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
    compile 'org.apache.httpcomponents:httpcore:4.4.1'
    compile 'org.apache.httpcomponents:httpclient:4.5'
}

检查方向:

 OrientationEventListener mOrientationEventListener = new OrientationEventListener(
            this, SensorManager.SENSOR_DELAY_NORMAL) {

        @Override
        public void onOrientationChanged(int orientation) {
            //checking if device was rotated
            if (orientationPortrait != isPortrait(orientation)) {
                orientationPortrait = !orientationPortrait;
                Log.d(TAG, "Device was rotated!");
            }
        }
    };

不要忘记启用和禁用监听器:

private boolean isPortrait(int orientation) {
    return (orientation >= (360 - 90) && orientation <= 360) || (orientation >= 0 && orientation <= 90);
}

答案 3 :(得分:2)

通常情况下,方向更改会调用OnCreate(),除非您已经做了一些其他操作。

你可以把逻辑放在那里。