2013-11-22 119 views
0

我需要纯粹使用Java创建此布局,而不是使用XML。这意味着我在这个项目中没有Eclipse的XML。现在我的布局是这样的:创建没有XML文件的RelativeLayout

enter image description here

您可能无法从画面,但块0,1和3,告诉都在彼此的顶部。我需要的5块看起来像这样:

0 1 2 
3 4 

这是我第一次没有使用XML文件,以使活动的布局,所以我有搞清楚了这东西了微调一起。如果您注意到我在完成“长”的方式时可以更有效地编写代码,请让我知道。

但我的问题是,为什么不是砌下我需要他们的顺序?我觉得我在搞这个很简单。

public class Puzzle extends Activity { 

    int z1to5 = 50; 
    int z6to10 = 50; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.XXXXX); 

     RelativeLayout relativelayout = new RelativeLayout(getApplicationContext()); 

     Button bList[] = new Button[5]; 

     for (int i = 0; i < 5; i++) { 
      Button button = new Button(getApplicationContext()); 
      button = new Button(getApplicationContext()); 
      button.setId(i); 
      button.setText("" + i); 
      relativelayout.addView(button); 
      bList[i] = button; 
     } 

     RelativeLayout.LayoutParams params0 = new RelativeLayout.LayoutParams(150, 150); 
      bList[0].setLayoutParams(params0); 

     RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(150, 150); 
      params1.addRule(RelativeLayout.RIGHT_OF, bList[0].getId()); 
      bList[1].setLayoutParams(params1); 

     RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(150, 150); 
      params2.addRule(RelativeLayout.RIGHT_OF, bList[1].getId()); 
      bList[2].setLayoutParams(params2); 

     RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(150, 150); 
      params3.addRule(RelativeLayout.BELOW, bList[0].getId()); 
      bList[3].setLayoutParams(params3); 

     RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(150, 150); 
      params4.addRule(RelativeLayout.RIGHT_OF, bList[3].getId()); 
      params4.addRule(RelativeLayout.BELOW, bList[1].getId()); 
      bList[4].setLayoutParams(params4); 

     setContentView(relativelayout); 
    } 
} 
+0

是否有你使用相对布局而不是线性布局的原因 –

+0

我不知道答案是什么,但1或2个按钮去了正确的相对位置。 (2的右边1)(4的右边3和1以下)。那两个有什么不同? –

+0

@JoshEngelsma不,没有真正的理由。只是选择它开始。根本不承诺。 – Matt

回答

1

我得到它的这种变化工作:

for (int i = 0; i < 5; i++) { 
     Button button = new Button(getApplicationContext()); 
     button = new Button(getApplicationContext()); 
     button.setId(i+1); 
     button.setText("" + i); 
     relativelayout.addView(button); 
     bList[i] = button; 
    } 

button.setId(i+1);

的文档,我不能找到它,但也许当你做出一个新的浏览程序,默认NO_ID等于0

+0

这就像一个魅力。不知道为什么。也许你对默认的NO_ID是正确的。无论如何,谢谢! – Matt

+0

不客气! :) –

+0

刚刚发现'公共静态最终int View.NO_ID = 0xffffffff;'(-1),所以我真的不知道,但很高兴它的工作! –