0

我正在制作一个应用程序,我希望用户在纵向模式下而不是横向模式下拥有其他视图。所以我制作了 1 个普通的 xml-fileen,然后制作了另一个我在制作 xml-file 时签名的用于横向模式的文件。因此,自动创建了一个名为 layout-land 的额外文件夹,新的 xml 文件(与旧文件同名)位于该文件夹中。

但是,每当我以横向模式启动我的应用程序时,它就会崩溃(xml 文件用于 MainActivity.java)?

我用于横向模式的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/landscape1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Houd uw telefoon rechtop en herstart de app voor correcte weergave"
        android:textColor="#665252" />

</RelativeLayout>

日志输出:

06-03 19:22:14.664: D/AndroidRuntime(285): Shutting down VM

06-03 19:22:14.664: W/dalvikvm(285): threadid=1: thread exiting with uncaught exception (group=0x4001d800)

06-03 19:22:14.684: E/AndroidRuntime(285): FATAL EXCEPTION: main

06-03 19:22:14.684: E/AndroidRuntime(285): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rome/com.example.rome.MainActivity}: 
java.lang.NullPointerException

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.os.Handler.dispatchMessage(Handler.java:99)

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.os.Looper.loop(Looper.java:123)

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.app.ActivityThread.main(ActivityThread.java:4627)

06-03 19:22:14.684: E/AndroidRuntime(285):  at java.lang.reflect.Method.invokeNative(Native Method)

06-03 19:22:14.684: E/AndroidRuntime(285):  at java.lang.reflect.Method.invoke(Method.java:521)

06-03 19:22:14.684: E/AndroidRuntime(285):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

06-03 19:22:14.684: E/AndroidRuntime(285):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

06-03 19:22:14.684: E/AndroidRuntime(285):  at dalvik.system.NativeStart.main(Native Method)

06-03 19:22:14.684: E/AndroidRuntime(285): Caused by: java.lang.NullPointerException

06-03 19:22:14.684: E/AndroidRuntime(285):  at com.example.rome.MainActivity.onCreate(MainActivity.java:21)

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

06-03 19:22:14.684: E/AndroidRuntime(285):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

06-03 19:22:14.684: E/AndroidRuntime(285):  ... 11 more

主要活动.java:

package com.example.rome;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;
import android.widget.Button;
import android.view.View;
import android.widget.Toast;
import android.content.Intent;
import android.view.MenuInflater;
import android.view.MenuItem;


public class MainActivity extends Activity implements View.OnClickListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.imageButton1).setOnClickListener(this);
    findViewById(R.id.imageButton2).setOnClickListener(this);
    findViewById(R.id.imageButton3).setOnClickListener(this);
    findViewById(R.id.imageButton4).setOnClickListener(this);
    findViewById(R.id.imageButton5).setOnClickListener(this);
    findViewById(R.id.imageButton6).setOnClickListener(this);
    findViewById(R.id.imageButton7).setOnClickListener(this);
    findViewById(R.id.imageButton8).setOnClickListener(this);
    findViewById(R.id.imageButton9).setOnClickListener(this);



}


    @Override
    public void onClick(View v){
      switch(v.getId()){
        case R.id.imageButton1:
          startActivity(new Intent(MainActivity.this, Metros.class));
          break;
        case R.id.imageButton2:
          startActivity(new Intent(MainActivity.this, Programma.class));
          break;
        case R.id.imageButton8:
              startActivity(new Intent(MainActivity.this, Italiaans.class));
              break;
        //-- more cases --
        case R.id.imageButton9:
              startActivity(new Intent(MainActivity.this, Telefoonnummers.class));
              break;
        case R.id.imageButton7:
              startActivity(new Intent(MainActivity.this, Kaart.class));
              break;
        case R.id.imageButton5:
              startActivity(new Intent(MainActivity.this, Restaurants.class));
              break;
        case R.id.imageButton3:
              startActivity(new Intent(MainActivity.this, Bus.class));
              break;
        case R.id.imageButton4:
              startActivity(new Intent(MainActivity.this, Winkelen.class));
              break;
        case R.id.imageButton6:
              startActivity(new Intent(MainActivity.this, Syllabus.class));
              break;
      }
    }


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.Over:
    startActivity(new Intent(this, Over.class));
    return true;
    case R.id.Hotels:
    startActivity(new Intent(this, Hotels.class));
    return true;
    default:
    return super.onOptionsItemSelected(item);
    }
}


}

activity_main.xml(纵向模式版本):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0B0E15"
android:gravity="center_horizontal"
tools:context=".MainActivity" >

<ImageButton
    android:id="@+id/imageButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_centerHorizontal="true"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/metro2" />

<ImageButton
    android:id="@+id/imageButton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_toLeftOf="@+id/imageButton1"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/programma" />

<ImageButton
    android:id="@+id/imageButton3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/imageButton1"
    android:layout_toRightOf="@+id/imageButton1"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/bus2" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="18dp"
    android:height="20dp"
    android:textColor="#FFFFFF"
    android:width="175dp" />

<ImageButton
    android:id="@+id/imageButton4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/imageButton1"
    android:layout_toLeftOf="@+id/imageButton3"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/supermarkt2" />

<ImageButton
    android:id="@+id/imageButton5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageButton2"
    android:layout_below="@+id/imageButton2"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/restaurants2" />

<ImageButton
    android:id="@+id/imageButton6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/imageButton4"
    android:layout_toRightOf="@+id/imageButton4"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/syllabus2" />

<ImageButton
    android:id="@+id/imageButton7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/imageButton4"
    android:layout_toLeftOf="@+id/imageButton6"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/kaartrome2" />

<ImageButton
    android:id="@+id/imageButton8"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageButton6"
    android:layout_alignTop="@+id/imageButton7"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/italiaans2" />

<ImageButton
    android:id="@+id/imageButton9"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/imageButton7"
    android:layout_toLeftOf="@+id/imageButton7"
    android:minHeight="100dp"
    android:minWidth="100dp"
    android:src="@drawable/telefoon2" />

    <TextView
        android:id="@+id/Streeptop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView1"
        android:layout_alignBottom="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:text="______________________________________________"
        android:textColor="#FFFFFF" />

    <TextView
        android:id="@+id/Streep"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/Streeptop"
        android:layout_below="@+id/imageButton7"
        android:text="_______________________________"
        android:textColor="#FFFFFF" />

</RelativeLayout>

你能帮我吗?

提前致谢, IDE

4

2 回答 2

0

以下来自 Android 开发者大会的视频展示了微回流和宏回流的示例(大约 11 分钟开始)。 http://www.youtube.com/watch?v=Jl3-lzlzOJI

对于基本的宏观回流(又名土地与肖像),您想要:

- 文件中的纵向视图:res/layout/your_xml_file.xml

- 文件中的横向视图:res/layout-land/your_xml_file.xml

那是在两个单独的文件夹中具有相同名称的 2 个文件。您的 xml 代码似乎没有任何问题。

于 2013-06-03T19:16:41.747 回答
0

问题是您正在onClickListener为所有这些Buttons显然不存在于横向设置。Buttons如果null没有设置监听器,或者更好地检查哪个layout充气或设备处于哪个方向, 您需要在那里进行检查。

但是,我可以给出执行上述操作的示例,因为您对所有这些都使用相同的侦听器,因此在 xml 肖像文件中Buttons设置它可能会更容易。onClick对于每个Button做类似的事情

<Button
    android:id="@+id/imageButton1"
    android:onClick="functionName"

然后在您的 java 代码中,只需将onClick您在 xml 中使用的任何名称命名为,您不必将这些侦听器设置为onCreate(). 所以你不需要implements View.OnClickListener并且可以取出所有的

findViewById(R.id.imageButton1).setOnClickListener(this);

我的这个 SO 答案可能有助于提高创建Intents效率。我喜欢它,但可能适合也可能不适合你。

于 2013-06-03T19:47:38.543 回答