2011-12-08 4 views
1

私は、RelativeLayoutを作成し、そこにボタンを追加するいくつかのコードを以下に示します。それは、onCreate()から作成されたときにうまく描画され、赤い背景に青色のボタンを表示します。ボタンを追加するとRelativeLayoutの背景が黒くなるのはなぜですか?

しかし、新しいReltativeLayoutを最初にクリックすると、新しいボタンが黒い背景に表示されるので、RelativeLayoutは表示されません。

面白いのは、ボタンを追加する行をコメントアウトすると機能し、何とかボタンが相対レイアウトに影響を与えているということです。

ありがとうございました。

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; 
     } 
    }; 
} 
+0

を呼び出す前にv.setVisibility(View.GONE);を追加するには、RelativeLayoutにviewParamsを設定する代わりに、()に動作し – Cata

答えて

2

あなたのコードの変更を行い、すなわちcreateNewView(Color.GREEN, Color.MAGENTA);

+0

setContentViewに感謝し、それを設定してみてください! – SkolVikingsGuy

+0

申し訳ありませんが、現実世界のコードでは、ハードコードされたサイズ(500x500)を使用していないため動作しませんが、代わりにFILL_PARENTが使用されています。フィックスは500x500で機能しましたが、FILL_PARENTでは機能しませんでした。上記のコードを編集しました。あなたが提案した問題が私自身の質問に答えるのを助けることができる理由を説明してください。ありがとう。 – SkolVikingsGuy

+0

最初に回答を受け入れる – user493244

関連する問題