为什么添加按钮后我的背景会消失?

时间:2011-12-09 14:13:11

标签: android

为什么下面的代码会失败?

我的main.xml中有一个蓝色的relativeLayout。点击我正在添加一个绿色按钮。

在我的摩托罗拉Xoom上运行时,我点击屏幕,我看到绿色按钮显示,但背景从蓝色变为黑色。如果我再次点击我的蓝色背景显示。再次点击,我看到黑...

我错过了什么?

感谢您的帮助。

package com.android.mikeviewtester;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;

public class ViewTesterActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );

        // set the relative layout as our view  
        setContentView( R.layout.main );

        RelativeLayout currentView = (RelativeLayout) findViewById( R.id.MyRelativeLayout );

        // set a listener  
        currentView.setOnTouchListener( (android.view.View.OnTouchListener) mOnTouchListener );
    }

    private android.view.View.OnTouchListener mOnTouchListener = new android.view.View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {

            if ( v != null )
                v.onTouchEvent( event );

            if ( event.getAction() == MotionEvent.ACTION_UP ) {

                android.widget.RelativeLayout vw = (android.widget.RelativeLayout) findViewById( R.id.MyRelativeLayout );

                // create and add a new cyan button 
                Button btn = new Button( ViewTesterActivity.this );
                btn.setBackgroundColor( Color.GREEN );
                vw.addView( btn, 100, 100 );
                vw.invalidate();
                btn.invalidate();
            }

            return true;
        }
    };
}

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/MyRelativeLayout"
    android:background="#0000FF">
</RelativeLayout>

2 个答案:

答案 0 :(得分:2)

我认为问题来自onCreate()的en调用setContentView()方法。 尝试那样

public void onCreate(Bundle savedInstanceState) {
    super.onCreate( savedInstanceState );

    // set the relative layout as our view 
    setContentView(R.layout.main);
    currentView  = (RelativeLayout)findViewById(R.id.main);

    // create a red button 
    Button btn = new Button( this );
    btn.setBackgroundColor( Color.RED );
    Relative.LayoutParams params = new Relative.LayoutParams( 100, 100 );
    currentView.addView( btn, params );

    // setup the view (blue background) 
    currentView.setBackgroundColor( Color.BLUE );
    currentView.setOnTouchListener( (android.view.View.OnTouchListener) mOnTouchListener );
}

你的main.xml文件应该是这样的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/main"
      android:layout_width="fill_parent"
       android:layout_height="fill_parent"/>

答案 1 :(得分:1)

我不确定错误是否来自那个但你没有使用正确的布局参数。 您应该用于视图的布局参数是来自父级的参数。 在你的情况下,你应该使用RelativeLayout.LayoutParams为你的按钮,我想你的相对布局FrameLAyout.LayoutParams。