在我的Android应用程序中,我想创建一堆ConstraintLayouts
,其中每个都有一个ImageView
和一个TextView
。
一切都是从一个我将开始使用的TableRow
的代码创建的。我的问题是,尽管我可以通过LayoutParams为ConstraintLayout
设置边距,但是当我尝试设置边距时,ImageView
和TextView
根本没有改变。
public fun generateAsset(tableRow: TableRow) {
// <android.support.constraint.ConstraintLayout
// android:layout_margin="4dp"
// android:background="@drawable/x32_tile_dark">
val clayout = ConstraintLayout(context)
tableRow.addView(clayout)
val cparams = clayout.layoutParams as TableRow.LayoutParams
cparams.setMargins(4, 4, 4, 4) // <--- Works correctly!
clayout.layoutParams = cparams
clayout.setBackgroundResource(R.drawable.x32_tile_dark)
// <ImageView
// android:layout_width="0dp"
// android:layout_height="60dp"
// android:layout_marginTop="8dp"
// app:srcCompat="@drawable/x256_spaceship_door_gray_blue" />
val iView = ImageView(context)
clayout.addView(iView)
val iparams = iView.layoutParams as ConstraintLayout.LayoutParams
iparams.width = ConstraintLayout.LayoutParams.MATCH_PARENT
iparams.height = 200
iparams.setMargins(8, 8, 8, 8) // <--- Does not do anything!
iView.layoutParams = iparams
iView.setImageResource(R.drawable.x256_spaceship_door_gray_blue)
// <TextView
// android:text="Massive Spaceship Door"
// android:layout_marginLeft="8dp"
// android:layout_marginRight="8dp"
// android:layout_marginBottom="4dp"
// android:textColor="@android:color/white" />
val ntext = TextView(context)
clayout.addView(ntext)
val nparams = ntext.layoutParams as ConstraintLayout.LayoutParams
nparams.setMargins(8, 8, 8, 8) // <--- Does not do anything!
ntext.layoutParams = nparams
ntext.setTextColor(Color.WHITE)
ntext.text = assetName
}
之所以不起作用,可能是因为我尚未设置ImageView
和TextView
的约束,但是如何在代码中做到这一点?
ImageView
应该在ConstraintLayout
的中央,而TextView
应该在中央,但是在底部。
如何设置约束以完成上述操作?
答案 0 :(得分:0)
不是100%肯定在这里,但我有个建议,相信您必须致电
iView .updateMargins<ConstraintLayout.LayoutParama>{//do some stuff here}
。
您可能会问“为什么?”。
好吧,我认为这是因为您已经创建了val clayout = ConstraintLayout(context)
,但是没有指定它具有哪些attributeSet,因此采用了默认属性。并且由于您的视图已经具有defaultParams,因此需要立即对其进行更新。
但是,请进行一些独立研究或询问具有真正知识的真正专家。因为我不太确定,这只是一些建议。
答案 1 :(得分:0)
您应该怀疑未设置约束可能是问题所在。要以编程方式设置约束,请查看ConstraintSet。
此类允许您以编程方式定义要与ConstraintLayout一起使用的一组约束。它使您可以创建和保存约束,并将其应用于现有的ConstraintLayout。
作为补充, ConstraintSet 允许在设置约束时设置边距。
在线上有一些很好的教程,介绍如何使用 ConstraintSet 。