Почему мой фон RelativeLayout становится черным, когда я добавляю к нему кнопку? - PullRequest
1 голос
/ 08 декабря 2011

У меня есть код ниже, который создает RelativeLayout и добавляет к нему кнопку.Он хорошо рисует при создании из onCreate (), показывает синюю кнопку на красном фоне.

Но при создании новой RellativeLayout при нажатии на первую новая кнопка отображается на черном фоне, поэтому мой RelativeLayout не 't show.

Самое смешное, что это работает, если я закомментирую строку, добавляющую кнопку, поэтому кнопка каким-то образом влияет на относительное расположение.

Спасибо за любую помощь.

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.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;

public class ViewTesterActivity extends Activity {

    void createNewView( int bgColor, int btnColor ) {

        // create a new relative layout
        android.widget.RelativeLayout newView = new android.widget.RelativeLayout( this );

        // create a button
        Button btn = new Button( this );

        // set the background color
        btn.setBackgroundColor( btnColor );

        // create a layoutParams struct for adding the button to the relative layout view
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( 100, 100 );

        // add the button to the relative layout
        newView.addView( btn, params );

        // set the relative layout background color
        newView.setBackgroundColor( bgColor );

        // set the ontouch listener for the relativeLayout
        newView.setOnTouchListener( (android.view.View.OnTouchListener) mOnTouchListener );

        // create the layout to fill the activity
        RelativeLayout.LayoutParams viewParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);

        // set the relative layout as the view
        setContentView( newView, viewParams );
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );

        // create and set the initial view
        createNewView( Color.RED, Color.BLUE );
    }

    // ios - (void)buttonWasPressed:(id)whichButton {
    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 ) {

                // create and set a new view
                createNewView( Color.GREEN, Color.MAGENTA );
            }

            return true;
        }
    };
}

1 Ответ

2 голосов
/ 08 декабря 2011

Внесите изменения в ваш код, т.е. добавьте v.setVisibility(View.GONE); перед вызовом createNewView(Color.GREEN, Color.MAGENTA);

...