2017-09-05 32 views
1

我不知道爲什麼我的兩個按鈕位於左側角落? 他們應該像第三個!我沒有發現任何錯誤。如果有人知道什麼是錯的,那將會很好。謝謝!我的2個按鈕位於左上角,不知道爲什麼?

在這裏你可以看到它的外觀acctualy enter image description here

代碼:

RelativeLayout relativeLayout = new RelativeLayout(this); 

    TextView tvDate = new TextView(this); 
    tvDate.setText("Date"); 
    tvDate.setId(R.id.tvDate); 
    RelativeLayout.LayoutParams p1 = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.FILL_PARENT, 
      RelativeLayout.LayoutParams.FILL_PARENT); 
    tvDate.setLayoutParams(p1); 
    p1.setMargins(0,30,0,0); 

    tvDate.setGravity(Gravity.CENTER_HORIZONTAL); 
    tvDate.setTextSize(TypedValue.COMPLEX_UNIT_SP, 25); 
    relativeLayout.addView(tvDate); 

    Button btNew = new Button(this); 
    btNew.setId(R.id.btNew); 
    btNew.setText(R.string.btNew); 
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
    lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
    lp.setMargins(0,120,0,0); 
    lp.addRule(RelativeLayout.BELOW, R.id.tvDate); 
    btNew.setLayoutParams(lp); 

relativeLayout.addView(btNew);

Button btShowTests = new Button(this); 
    btShowTests.setId(R.id.btShowTests); 
    btNew.setText(R.string.btShowTests); 
    RelativeLayout.LayoutParams p2 = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    p2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
    p2.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
    p2.setMargins(0,210,0,0); 
    p2.addRule(RelativeLayout.BELOW, R.id.btNew); 
    btNew.setLayoutParams(p2); 

    relativeLayout.addView(btShowTests); 

    Button btCheckTest = new Button(this); 
    btNew.setText(R.string.btShowTests); 
    btNew.setId(R.id.btCheckTest); 
    RelativeLayout.LayoutParams p3 = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    p3.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
    p3.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
    p3.setMargins(0,300,0,0); 
    p3.addRule(RelativeLayout.BELOW, R.id.btShowTests); 
    btNew.setLayoutParams(p3); 

    relativeLayout.addView(btCheckTest); 

    this.setContentView(relativeLayout); 
+0

您是否嘗試過不設定邊距? – Gotiasits

回答

1

你的代碼有兩個問題。第一個是您用於「日期」TextViewRelativeLayout.LayoutParams。您有此:

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

但您應該使用WRAP_CONTENT代替高度。如果將其保留爲FILL_PARENT,則在解決第二個問題後,將無法看到的任何按鈕。這是因爲TextView將填滿整個屏幕,所以BELOW它將被推出屏幕外。

第二個是你的代碼在它不應該的地方錯誤地指的是btNew。例如:

Button btShowTests = new Button(this); 
btShowTests.setId(R.id.btShowTests); 
btNew.setText(R.string.btShowTests); 
RelativeLayout.LayoutParams p2 = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.WRAP_CONTENT, 
     RelativeLayout.LayoutParams.WRAP_CONTENT); 
p2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
p2.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
p2.setMargins(0,210,0,0); 
p2.addRule(RelativeLayout.BELOW, R.id.btNew); 
btNew.setLayoutParams(p2); 

relativeLayout.addView(btShowTests); 

在這段代碼中你打電話btNew.setText()btNew.setLayoutParams(),當你要調用btShowTests.setText()btShowTests.setLayoutParams()。你有你的第三個按鈕同樣的問題:

Button btCheckTest = new Button(this); 
btNew.setText(R.string.btShowTests); 
btNew.setId(R.id.btCheckTest); 
RelativeLayout.LayoutParams p3 = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.WRAP_CONTENT, 
     RelativeLayout.LayoutParams.WRAP_CONTENT); 
p3.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
p3.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
p3.setMargins(0,300,0,0); 
p3.addRule(RelativeLayout.BELOW, R.id.btShowTests); 
btNew.setLayoutParams(p3); 

relativeLayout.addView(btCheckTest); 

在本節進行到btNew的所有引用應btCheckTest更換。一旦所有這樣做了,你的按鈕都將出現:

enter image description here

(請注意,第三個按鈕重新使用相同字符串作爲第二個按鈕,您可能會想改變這一點。)

相關問題