【发布时间】:2026-02-19 06:45:01
【问题描述】:
学习 ConstraintLayout 和 Kotlin 真是太棒了。我有一个constraintLayout popupView,它是TextView titleLabel 的父视图。我希望 popupView 高度调整到其子 titleLabel TextView 的内容。由于使用的文本字符串不同,titleLabel 的高度会有所不同。
titleLabel 和 popupView 都为高度布局参数设置为 WRAP_CONTENT,但 popupView 没有得到渲染。给popupView的constraintSet添加固定高度约束会渲染,但是titleLabel高度变化时固定高度不起作用。
任何想法如何让它工作?这就是我所拥有的
open class PopupActivity(): AppCompatActivity() {
public var message:String = "This is a message string for the label"
val titleLabel: TextView by lazy {
val label = TextView(this)
label.gravity = Gravity.CENTER
label.setTextSize(Constants.FontSizePopupTitle)
return@lazy label
}
val popupView: ConstraintLayout by lazy {
val view = ConstraintLayout(this)
view.setBackgroundColor(Color.primary())
return@lazy view
}
val view: ConstraintLayout by lazy {
val v = ConstraintLayout(this)
return@lazy v
}
@SuppressLint("ResourceType")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
view.id = 1
popupView.id = 2
titleLabel.id = 5
var margin = 2 * Constants.SpacingStandard.toInt()
view.addView(popupView)
popupView.addView(titleLabel)
titleLabel.layoutParams = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_CONSTRAINT,
ConstraintLayout.LayoutParams.WRAP_CONTENT)
titleLabel.text = message
popupView.layoutParams = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_CONSTRAINT,
ConstraintLayout.LayoutParams.WRAP_CONTENT)
val popupConstraintSet = ConstraintSet()
popupConstraintSet.connect(popupView.id, START, view.id, START, margin)
popupConstraintSet.connect(popupView.id, END, view.id, END, margin)
popupConstraintSet.centerHorizontally(popupView.id, view.id)
popupConstraintSet.centerVertically(popupView.id, view.id)
view.setConstraintSet(popupConstraintSet)
setContentView(view)
}
}
【问题讨论】:
-
你是不是缺少视图的 TOP 和 BOTTOM 约束?
-
也许,虽然我已经向 popupView 添加了一个约束集,它连接了 titleLabel 和 popupView 顶部、底部、开始、结束,但它也没有呈现。不知道还能尝试什么。
标签: android kotlin android-constraintlayout