layout和layout-land下建立同名main.xml,程序横竖屏时,则可以显示不同布局
我的问题是,两个main.xml中的布局是否可以不一致?
例如layout中的main.xml中无button,而layout-land中的main.xml有button。我尝试了这样的布局,并且在程序中为button设置了监听,但是程序报错为空指针错误。请问应该如果设置监听呢???layoutlayout-land布局

解决方案 »

  1.   

    感觉不可以,因为你的Activity只有一个,你可以把不用的button隐藏起来
      

  2.   

    可以设置不同的布局
    因为你需要定义Button的onClick,所以xml里面是一定要定义的。不显示Button就隐藏起来。
      

  3.   

    就是说我要在xml中定义button隐藏
    <Button 
        android:id="@+id/but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        />然后在程序中正常使用就可以了? 是这样吗?
    可是如果我两个xml中分别都有一个button,但是button的id不同,这样的情况下请问如何设置监听呢,因为在设置监听的时候就报错了
      

  4.   

    把button的id定义成一样的。
    哦哦,我先试试可是,如果我两个button的作用是不同的呢???
      

  5.   

    把button的id定义成一样的。
    哦哦,我先试试可是,如果我两个button的作用是不同的呢???
    那就定义两个button啊,你可以选择隐藏任何一个或两个,或者都显示。
      

  6.   

    把button的id定义成一样的。
    哦哦,我先试试可是,如果我两个button的作用是不同的呢???
    那就定义两个button啊,你可以选择隐藏任何一个或两个,或者都显示。
    这是两个都显示的时候:
    layout-land/mani.xml代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
        <TextView
            android:id="@+id/text"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:text="Hello ketty"/>
        <TextView 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:text="我是横屏"/>
    <Button 
        android:id="@+id/but1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        />
    </LinearLayout>layout/mani.xml代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:text="Hello"/>
        <TextView 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:text="我是竖屏"/>
    <Button 
        android:id="@+id/but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"/>
    </LinearLayout>Activity代码
    package com.example.hello;import android.os.Bundle;
    import android.app.Activity;
    import android.graphics.drawable.AnimationDrawable;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.animation.Animation;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;public class MainActivity extends Activity {
    Button but1;
    Button but; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    but1 = (Button) findViewById(R.id.but1);
    but = (Button) findViewById(R.id.but);
    but.setOnClickListener(buton);
    but1.setOnClickListener(buton1); } private Button.OnClickListener buton = new Button.OnClickListener() { @Override
    public void onClick(View v) {
    System.out.println("button"); }
    };
    private Button.OnClickListener buton1 = new Button.OnClickListener() { @Override
    public void onClick(View v) {
    System.out.println("button1"); }
    };
    }错误:
    10-25 13:25:31.619: ERROR/AndroidRuntime(14958): Caused by: java.lang.NullPointerException
    10-25 13:25:31.619: ERROR/AndroidRuntime(14958):     at com.example.hello.MainActivity.onCreate(MainActivity.java:24)
    10-25 13:25:31.619: ERROR/AndroidRuntime(14958):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    10-25 13:25:31.619: ERROR/AndroidRuntime(14958):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
    10-25 13:25:31.619: ERROR/AndroidRuntime(14958):     ... 11 more
      

  7.   

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >    <TextView
            android:id="@+id/text"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:text="Hello ketty" />    <TextView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:text="我是横屏" />    <Button
            android:id="@+id/but1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone" //横屏的xml把这行去掉,竖屏保留
            />    <Button
            android:id="@+id/but"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"  //竖屏的xml把这行去掉,横屏保留
            /></LinearLayout>
    也就是说,这两个button在横屏和竖屏都有定义,只是分别隐藏一个。这样就不会报空指针异常,也能在横屏和竖屏下实现不同的功能。