2017-09-05 27 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

(请注意,第三个按钮重新使用相同字符串作为第二个按钮,您可能会想改变这一点。)

相关问题