【发布时间】:2018-02-23 23:51:27
【问题描述】:
我想要做的是以编程方式创建一行带有约束视图的按钮。 我正在创建两个按钮,我想让它们彼此相邻而不对 .xml 文件做任何事情,因为按钮的数量可能因用户而异。
我想使用类似的东西(此代码是 Activity 的一部分):
ConstraintLayout layout = findViewById(R.id.layout);
Button btn1 = new Button(this);
Button btn2 = new Button(this);
ConstraintLayout.LayoutParams params1 = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT,ConstraintLayout.LayoutParams.WRAP_CONTENT);
ConstraintLayout.LayoutParams params2 = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT,ConstraintLayout.LayoutParams.WRAP_CONTENT);
layout.addView(btn1, 1, params1);
params2.topToTop = btn1.getId();
params2.leftToRight = btn1.getId();
layout.addView(btn2, 2, params2);
设置两个 params2 值不起作用,因为显然我无法真正访问 button1 的 ID。 对此有什么可行的解决方案? 我读过和尝试过的东西:
- 使用标签而不是 ID
- 使用所有已创建按钮的 ArrayList 作为 Activity 的私有成员访问按钮
- 使用 setId() 为视图提供一些随机 ID(我已选择)
使用这样的东西可以工作,因为我已经在 xml 文件中预定义了 btn3:
params2.topToTop = layout.findViewById(R.id.btn3).getId();
params2.leftToRight = layout.findViewById(R.id.btn3).getId();
但在所有其他情况下,我的 btn2 只是落在 btn1 的顶部(或者更确切地说是在布局的左上角)
提前谢谢你!
【问题讨论】:
-
你需要为创建的按钮设置一个id,比如btn1.setId(1); btn2.setId(2) 或任何你想要的数字