手机旋转时不会出现横向布局

时间:2013-12-31 06:28:07

标签: android

我正在尝试为我的Android应用程序创建横向布局。所以我创建了一个名为 layout-land 的单独文件夹,在其中我为横向模式创建了main.xml

但是当我旋转手机时,它不会出现横向布局,而是会向我显示这样的消息,

Unfortunately Nasa Daily Image app has stopped

当我将configChanges="orientation|screensize"属性放在活动标记内时,它会显示纵向布局,即使我旋转了手机。 (这对我来说很清楚,因为活动不会在运行时重新启动。)

接下来,我尝试configChanges="orientation"覆盖onConfigurationChanged 方法,如下所示,

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

    if(newConfig.orientation== Configuration.ORIENTATION_LANDSCAPE){
        setContentView(R.layout.main);
    }else if(newConfig.orientation== Configuration.ORIENTATION_PORTRAIT){
        setContentView(R.layout.main);
    }
}

但我仍然收到错误消息。

所以我想显示横向布局。如何解决这个问题?

logcat的

12-31 12:04:02.367  16728-16728/com.nasa.nasadailyimageapp E/AndroidRuntime﹕ FATAL      EXCEPTION: main
java.lang.NullPointerException
        at com.nasa.nasadailyimageapp.MainActivity.resetDisplay(MainActivity.java:104)
        at com.nasa.nasadailyimageapp.MainActivity.access$100(MainActivity.java:22)
        at com.nasa.nasadailyimageapp.MainActivity$2.run(MainActivity.java:150)
        at android.os.Handler.handleCallback(Handler.java:605)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4448)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
        at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:3)

Android会自动从配置更改中的相应文件夹中提取相应的资源,除非您声明要处理这些更改,您已完成此操作。从清单和onConfigurationChanged()例程中删除configChanges =“orientation”,它将起作用。

换句话说,通过声明configChanges =“orientation”,你会说“不,Android!我会处理自己加载方向更改”。我认为不是你想要的。

另外需要注意的是,当你让Android处理方向(或任何配置更改)时,它会破坏你当前的Activity并使用新配置的新资源重新创建它。所以一定要考虑到这一点(需要保存/恢复状态)。

答案 1 :(得分:0)

在横向布局中,我没有像纵向布局那样放置相关的ID。这就是执行期间出现null异常的原因。两种布局都必须具有相同的资源ID。