2012-10-10 110 views
0

我想爲遊戲插入暫停按鈕和高分文本,並在遊戲視圖左上方的暫停按鈕和右上角的高分屏文本。我想編程它,但高分和按鈕不顯示。下面的代碼:以編程方式編輯Android SFGameView佈局

gameView = new SFGameView(this); 

    RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.FILL_PARENT, 
      RelativeLayout.LayoutParams.FILL_PARENT); 

    TextView textBox = new TextView(SFEngine.context); 
    textBox.setText("HIGH SCORE"); 
    textBox.setId(1); 
    Button pauseButton = new Button(SFEngine.context); 
    pauseButton.setText("PAUSE"); 
    pauseButton.setGravity(Gravity.RIGHT); 

    RelativeLayout layout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 


    lp.addRule(RelativeLayout.RIGHT_OF, textBox.getId()); 
    lp.addRule(RelativeLayout.ALIGN_PARENT_TOP); 


    layout.addView(textBox);   
    layout.addView(pauseButton,lp); 

    layout.addView(gameView,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

    setContentView(layout,rlp); 

這裏的按鈕監聽,該按鈕將不會對觸摸事件

pauseButton.setOnTouchListener(new OnTouchListener(){ 
     public boolean onTouch(View v, MotionEvent e) { 
      try{ 
       Thread.sleep(1000); 
      } 
      catch(InterruptedException ex){ 
      } 

      return true; 
     } 
    }); 

回答

0

您需要正確添加的LayoutParams迴應。每個視圖都需要其父級類型的LayoutParams。例如。你的TextView和Button需要RelativeLayout.LayoutParams,而你的RelativeLayout需要FrameLayout.LayoutParams(因爲這是你在setContentView中添加的任何東西的內置容器)。

對於暫停按鈕設置RelativeLayout.LayoutParams到WRAP_CONTENT & WRAP_CONTENT,與規則ALIGN_PARENT_TOP & ALIGN_PARENT_RIGHT。

對TextBox再添RelativeLayout.LayoutParams與WRAP_CONTENT & WRAP_CONTENT和規則ALIGN_PARENT_TOP & ALIGN_PARENT_LEFT。

然後,RelativeLayout命名佈局需要FrameLayout.LayoutParams和MATCH_PARENT & MATCH_PARENT。

示例代碼:

RelativeLayout layout = new RelativeLayout(this); 
    layout.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    SFGameView game = new SFGameView(this); 
    game.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    Button btn = new Button(this); 
    btn.setText("||"); 

    RelativeLayout.LayoutParams btnLP = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    btnLP.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
    btnLP.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
    btn.setLayoutParams(btnLP); 

    TextView tv = new TextView(this); 
    tv.setText("Some Text"); 

    RelativeLayout.LayoutParams textLP = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    textLP.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
    textLP.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
    tv.setLayoutParams(textLP); 

    layout.addView(game); 
    layout.addView(btn); 
    layout.addView(tv); 

    setContentView(layout); 

至於監聽器。使用setOnClickListener(而不是onTouch)。

+0

我編輯了我的代碼,並按照你的建議,但它仍然不會出現,屏幕只顯示我的遊戲。我將我的遊戲視圖設置爲align_parent_bottom。 –

+0

在其他兩個視圖之前將遊戲視圖添加到佈局。 – nmw

+0

它顯示出來,但按鈕似乎採取了所有的空間和高分文本是在它的頂部,我試圖設置button.setHeight和設置重量仍然不會工作 –