我正在尝试为我的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)
答案 0 :(得分:3)
Android会自动从配置更改中的相应文件夹中提取相应的资源,除非您声明要处理这些更改,您已完成此操作。从清单和onConfigurationChanged()例程中删除configChanges =“orientation”,它将起作用。
换句话说,通过声明configChanges =“orientation”,你会说“不,Android!我会处理自己加载方向更改”。我认为不是你想要的。
另外需要注意的是,当你让Android处理方向(或任何配置更改)时,它会破坏你当前的Activity并使用新配置的新资源重新创建它。所以一定要考虑到这一点(需要保存/恢复状态)。
答案 1 :(得分:0)
在横向布局中,我没有像纵向布局那样放置相关的ID。这就是执行期间出现null异常的原因。两种布局都必须具有相同的资源ID。