Android 方向改变时的不同布局

Android 方向改变时的不同布局,android,android-layout,Android,Android Layout,我在layout land和layout port文件夹中有两个main.xml文件,当手机的方向改变时,它会强制重新加载main.xml @Override public void onConfigurationChanged(Configuration configure){ super.onConfigurationChanged(configure); setContentView(R.layout.main); 它在纵向模式下运行良好,但在横向

我在layout land和layout port文件夹中有两个main.xml文件,当手机的方向改变时,它会强制重新加载main.xml

@Override
    public void onConfigurationChanged(Configuration configure){
        super.onConfigurationChanged(configure);
        setContentView(R.layout.main);
它在纵向模式下运行良好,但在横向模式下按下页面上的任何图像按钮都会导致应用程序崩溃。按下imagebuttons时,所有的imagebuttons都会将名为grid的图像更改为不同的图像。打开另一页的按钮在两种布局中都可以正常工作。下面是一个代码示例

final ImageView imageView = (ImageView)findViewById(R.id.grid);
// This is an imagebutton
findViewById(R.id.plank).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                imageView.setImageResource(R.drawable.gridplanks);
            }
    });
// This is a button that brings up a new page
      findViewById(R.id.mcg).setOnClickListener(new OnClickListener() {
             @Override
              public void onClick(View view) {
                 startActivity(new Intent("com.example.minecraftcraftingguide.MCG"));
                 }
});
这是你需要的吗?对不起,是编程新手

>09-18 22:20:46.688: ERROR/AndroidRuntime(334): FATAL EXCEPTION: main
09-18 22:20:46.688: ERROR/AndroidRuntime(334): java.lang.NullPointerException
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at com.example.minecraftcraftingguide.Menu$1.onClick(Menu.java:27)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at android.view.View.performClick(View.java:2485)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at android.view.View$PerformClick.run(View.java:9080)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at android.os.Handler.handleCallback(Handler.java:587)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at android.os.Looper.loop(Looper.java:123)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at android.app.ActivityThread.main(ActivityThread.java:3683)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at java.lang.reflect.Method.invokeNative(Native Method)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at java.lang.reflect.Method.invoke(Method.java:507)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-18 22:20:46.688: ERROR/AndroidRuntime(334):     at dalvik.system.NativeStart.main(Native Method)

您必须在mainfest中进行配置更改,并且不需要在onConfigurationChanged()方法中写入setcontentView(),事实上,在mainfest中声明后,您不需要在程序中写入任何内容,android将自动获取驻留在layout land xml文件中的横向xml文件

因为无论何时调用setContentView(),都必须再次声明其元素

只需在mainfest中提到,在这个活动标签中,android:configChanges=keyboardHidden | orientation 或
不要在onConfigChanged()方法中写入任何内容

您的默认布局文件夹中有main.xml还是只有布局端口和布局区域中的两个

如果我是你,我会将文件从布局端口移动到默认布局文件夹。然后,如果应用程序位于横向文件夹中,应用程序将使用layout land中的文件,否则(如果应用程序处于纵向模式)将使用默认文件夹中的文件


另一个提示:检查两个xml文件中的拼写。可能某个按钮id中缺少一个字符。

我建议设置一些断点,在调试模式下运行它,并查看崩溃的实际原因。我敢肯定,每次旋转设备时都会调用onCreate,因此您可能应该执行上面所做的所有工作。请显示logcat输出,以及您得到的错误。谢谢。我瞎猜是你删除了这个setContentView。那里不需要它。按照此处的说明进行快速配置更改,而无需堆栈跟踪,这将很难帮助您。请将stacktrace粘贴到此处。当我更改方向时,它不会更改xml文件。如果我在横向中启动应用程序,它会加载横向文件,但如果我按下按钮,它仍会崩溃。我将横向端口main.xml移动到默认布局文件夹,但现在所有按钮在横向中都不起作用。应用程序没有崩溃,只是没有任何功能。另外,它不会在方向改变时从横向切换回纵向。事实上,我在横向模式下发现id拼写错误,我前面提到的“卡在横向模式下”问题显然是模拟器的一个已知问题。它现在似乎正在工作。谢谢