【发布时间】:2013-12-23 02:48:33
【问题描述】:
下面是我的布局。
我想要的是 2 个绿色箭头在左上角的正方形中垂直居中。此外,双数字符号(“##”)需要在左上角的正方形中垂直和水平居中。
然后,另一组双数字符号需要在右上角的正方形中垂直和水平居中。
下面是代码。
public class Puzzle extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dividers();
topLeft();
topRight();
setContentView(relativelayout);
}
public void topLeft() {
RelativeLayout.LayoutParams params0 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
params0.addRule(RelativeLayout.ABOVE, view0.getId());
params0.addRule(RelativeLayout.LEFT_OF, view1.getId());
relativelayout.addView(topLeftRL, params0);
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params1.addRule(RelativeLayout.CENTER_HORIZONTAL);
topLeftRL.addView(puzzle, params1);
RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params2.addRule(RelativeLayout.CENTER_VERTICAL);
params2.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
topLeftRL.addView(left, params2);
RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params3.addRule(RelativeLayout.CENTER_VERTICAL);
params3.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
topLeftRL.addView(right, params3);
RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params4.addRule(RelativeLayout.CENTER_IN_PARENT);
topLeftRL.addView(levelCounter, params4);
left.setImageResource(R.drawable.left_arrow);
right.setImageResource(R.drawable.right_arrow);
puzzle.setText(c.getResources().getString(R.string.puzzlePuzzleTV));
levelCounter.setText("###");
}
public void topRight() {
RelativeLayout.LayoutParams params0 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
params0.addRule(RelativeLayout.ABOVE, view0.getId());
params0.addRule(RelativeLayout.RIGHT_OF, view1.getId());
relativelayout.addView(topRightRL, params0);
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params1.addRule(RelativeLayout.CENTER_HORIZONTAL);
topRightRL.addView(record, params1);
RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params2.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params2.addRule(RelativeLayout.CENTER_HORIZONTAL);
topRightRL.addView(moves, params2);
RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params3.addRule(RelativeLayout.CENTER_IN_PARENT);
topRightRL.addView(movesCounter, params3);
movesCounter.setText("##");
record.setText(c.getResources().getString(R.string.puzzleRecordTV) + " " + "##");
moves.setText(c.getResources().getString(R.string.puzzleMovesTV));
}
public void dividers() {
// vertical line (top of screen)
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(5, height / 6);
params1.addRule(RelativeLayout.CENTER_HORIZONTAL);
params1.setMargins(0, 10, 0, 10); // left, top, right, bottom
relativelayout.addView(view1, params1);
// horizontal line (top of screen)
RelativeLayout.LayoutParams params0 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 5);
params0.addRule(RelativeLayout.BELOW, view1.getId());
params0.setMargins(10, 0, 10, 0); // left, top, right, bottom
relativelayout.addView(view0, params0);
// horizontal line (button of screen)
RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 5);
params3.addRule(RelativeLayout.ABOVE, linearlayout.getId());
relativelayout.addView(view3, params3);
}
}
所以看起来当我将多个addRule() 添加到一个参数时,它不会同时读取它们。我认为问题出在topLeft() 方法的这一行:params0.addRule(RelativeLayout.ABOVE, view0.getId());。我试过用那个参数中的另一个 addRule 切换这条线,结果是一样的。这是为什么呢?
编辑 #1 - 清理了我的代码,使其更整洁、更易于阅读。
【问题讨论】:
标签: java android layout textview android-relativelayout