我正在創建一個基于 ConstraintLayout 的自定義布局,我想在其中使用
下面是我的布局代碼:
class MyCustomLayout(context: Context, attrs: AttributeSet) : ConstraintLayout(context, attrs) {
init {
val layout = inflate(context, R.layout.circular_buttons, this) as ConstraintLayout
val buttonMain = findViewById<Button>(R.id.circular_buttons_button_main)
val newButton = Button(context)
newButton.id = View.generateViewId()
newButton.text = "Button Kotlin"
newButton.visibility = VISIBLE
val params =
LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
).apply {
circleConstraint = buttonMain.id
circleRadius = 100
circleAngle = 60f
}
newButton.layoutParams = params
layout.addView(newButton)
}}
我也嘗試使用ConstraintSet添加約束,但是,結果是一樣的。
val constraintSet = ConstraintSet()
constraintSet.clone(layout)
constraintSet.constrainCircle(newButton.id, buttonMain.id, 100, 60f)
constraintSet.constrainHeight(newButton.id, ConstraintSet.WRAP_CONTENT)
constraintSet.constrainWidth(newButton.id, ConstraintSet.WRAP_CONTENT)
constraintSet.applyTo(layout)
我究竟做錯了什么?
uj5u.com熱心網友回復:
您正在將您的按鈕添加到不同的父級。您的“布局”變數參考了父視圖。您想要添加按鈕的 ConstraintLayout 成為此視圖的子項。
你的層次結構是這樣的:
<ConstraintLayout>
<ConstraintLayout>
<Button> --> Added from XML
<ConstraintLayout>
<Button> --> Added from code
</ConstraintLayout>
要解決這個問題,您需要參考 XML 中的約束布局并向其添加按鈕。
例如:
val clMain = layout.findViewById<ConstraintLayout>(R.id.cl_main)
...
clMain.addView(newButton)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/355459.html
標籤:安卓 xml 科特林 android-constraintlayout
