在iOS中,我非常喜欢删除故事板,并使用制图框架在代码中展示所有内容。这是从地图学的github窃取的:
constrain(view1, view2) { view1, view2 in
view1.width == (view1.superview!.width - 50) * 0.5
view2.width == view1.width - 50
view1.height == 40
view2.height == view1.height
view1.centerX == view1.superview!.centerX
view2.centerX == view1.centerX
view1.top >= view1.superview!.top + 20
view2.top == view1.bottom + 20
}Android有没有类似的东西?看起来新的约束布局是朝着正确方向迈出的一步,但我想通过编程来实现它。
发布于 2016-10-14 02:53:01
虽然有点晚,但您需要基本上将约束布局中的视图视为具有自己的LayoutParams的常规视图。
在ConstraintLayout案例中,文档位于以下位置:https://developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout.LayoutParams
这个类包含不同的属性,指定视图在ConstraintLayout中的布局方式。要在运行时构建约束,建议使用ConstraintSet。
因此,推荐的方法是使用ConstraintSet。
这里有一个很好的代码示例,但核心概念是您需要创建一个新的集合(通过复制/克隆/新建等方式),设置其属性,然后将其应用于您的布局。
例如:假设您的布局包含一个ConstraintLayout (这里称为mConstraintLayout ),而它内部又包含一个视图(示例中为R.id.go_button),您可以这样做:
ConstraintSet set = new ConstraintSet();
// You may want (optional) to start with the existing constraint,
// so uncomment this.
// set.clone(mConstraintLayout);
// Resize to 100dp
set.constrainHeight(R.id.go_button, (int)(100 * density));
set.constrainWidth(R.id.go_button, (int)(100 * density));
// center horizontally in the container
set.centerHorizontally(R.id.go_button, R.id.rootLayout);
// pin to the bottom of the container
set.connect(R.id.go_button, BOTTOM, R.id.rootLayout, BOTTOM, 8);
// Apply the changes
set.applyTo(mConstraintLayout);
// this is my… (ConstraintLayout) findViewById(R.id.rootLayout);发布于 2019-01-09 19:29:51
我遇到了来自iOS的完全相同的困境,在那里我觉得以编程方式构建视图是一种更常见的做法。
实际上,我正在使用Kotlin here将Stevia库移植到android上,因为新的ConstraintLayout与我们心爱的Autolayout非常相似。
下面是如何定义一个简单视图
class MyView(context: Context): ConstraintLayout(context) {
val label = TextView(context)
init {
// View Hierarchy
subviews(
label
)
// Layout
label.centerInParent()
// Style
label.style {
textSize = 12F
}
}}请注意,这是引擎盖下的纯本机约束布局,正如Martin的回答所解释的那样。
这只是一个开始,但到目前为止,它已经被证明是用Kotlin编写android视图的一种令人愉快的方式,所以我想我应该分享一下。希望这能有所帮助:)
https://stackoverflow.com/questions/39296627
复制相似问题