方向改变的不同布局

时间:2011-09-19 04:44:18

标签: android android-layout

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

@Override
    public void onConfigurationChanged(Configuration configure){
        super.onConfigurationChanged(configure);
        setContentView(R.layout.main);

它在纵向上工作正常,但在横向按下页面上的任何图像按钮会导致应用程序崩溃。按下时,图像按钮都会将名为 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)

2 个答案:

答案 0 :(得分:1)

你的默认布局文件夹中有一个main.xml,还是layout-port和layout-land中的两个?

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

另一个提示:检查两个xml文件中的拼写。也许你错过了一个按钮id中的一个角色。

答案 1 :(得分:0)

你必须在mainfest中对ConfigChanges进行decalare,你不需要在onOnfigurationChanged()方法中编写setcontentView(),事实上,在mainfest中声明后,你不需要在你的程序中写任何东西,android会自动得到横向xml文件,它位于layout-land xml文件中。

因为每当你调用setContentView()时,你必须再次声明它的元素。!!!

只需在mainfest中提及,在此活动标签中android:configChanges = keyboardHidden | orientation            要么 不要在你的onConfigChanged()方法中写任何东西