如何在android 2.3.3中使用onConfigurationChanged()和newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE

时间:2012-03-05 12:27:31

标签: android

我正在使用onConfigurationChanged()。在那里,当我从LandScape变为Portrait时,它正在调用if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)并从LandScape转移到Portrait。但是当我从Portrait改为Land-Scape时,它并没有改为LandScape,因为它正在调用if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)所以它不会从LandScape变为Portrait。 请帮忙。

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

        //int orientation = this.getResources().getConfiguration().orientation;

        if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.d("Entered to change as Portrait ","PPPPPPPPPPPPPPPPP");
            setContentView(R.layout.settings);
        } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Log.d("Entered to change as LandScape ","LLLLLLLLLLLLLLLLLLLL");
            setContentView(R.layout.settings);
        }

    }

6 个答案:

答案 0 :(得分:44)

只需将以下代码写入onConfigurationChanged方法并测试

即可
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){

    Log.e("On Config Change","LANDSCAPE");
}else{

    Log.e("On Config Change","PORTRAIT");
}

并将android:configChanges="keyboardHidden|orientation"写入您最明显的文件中,如下所示

<activity android:name="TestActivity"
           android:configChanges="keyboardHidden|orientation">

它在我身边工作,我希望它可以帮助你。

如果您使用的是平板电脑,请将|screenSize添加到android:configChanges

答案 1 :(得分:15)

您还应该注意:

  

警告:从Android 3.2(API级别13)开始,“屏幕大小”   当设备在纵向和横向之间切换时也会发生变化   取向。因此,如果您希望阻止运行时重新启动   开发API级别13或更高级别时的方向更改(如   由minSdkVersion和targetSdkVersion属性声明),你   除“方向”外,还必须包含“screenSize”值   值。也就是说,你必须decalare   机器人:configChanges = “方向|屏幕尺寸”。但是,如果你的   应用程序目标API级别12或更低,然后您的活动始终   处理此配置更改本身(此配置更改   即使在Android 3.2或Android上运行,也不会重新启动您的活动   更高的设备)。

答案 2 :(得分:3)

问题在于android:configChanges="orientation|keyboardHidden"

如果从androidmanifest.xml中删除|keyboardHidden,则onConfigurationChanged仅在从横向旋转到纵向时触发,而不是从纵向旋转到横向时(至少在默认模拟器中)。

希望这有帮助。

答案 3 :(得分:2)

在活动文件中写下以下代码。

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

    if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
     Log.e("On Config Change","LANDSCAPE");
    }
    else{
     Log.e("On Config Change","PORTRAIT");
    }

}

还要在清单文件中写下以下代码:

<activity
        android:name=".activities.TestActivity"
        android:configChanges="orientation|screenSize|keyboardHidden"
/>

答案 4 :(得分:0)

将此行写在android Manifest.xml 文件中:

<activity
  android:name="MyActivity"
  android:configChanges="orientation|keyboardHidden" />

答案 5 :(得分:0)

除了上述答案之外:如果您覆盖onConfigurationChanged方法并更新清单文件,则表示您正在自行处理configurationchanges。因此添加:

setContentView(R.layout.layout.xml);

onConfigurationChanged方法中 - 布局是布局文件 - 将解决问题。