更改 LayoutParams 后 RelativeLayout 中的按钮消失
Buttons in a RelativeLayout disappear after changing LayoutParams
我在相对布局中有五个按钮,如果我尝试动态更改它们的高度,一些按钮就会消失。
How buttons are looking before clicking
Buttons after clicking
val w = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45f, resources.displayMetrics)
btn_ran.setOnClickListener {
btn_1.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
btn_3.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
btn_4.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
btn_2.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
btn_5.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
}
我只想在点击按钮时随机更改所有按钮的高度。
如果你只想把height
改成随机值你可以这样做:
button1.setOnClickListener {
val h = (100..500).random() //random integer between 100 and 500
button1.layoutParams.height = h
button2.layoutParams.height = h
button1.requestLayout() //refresh layout
}
我怀疑您在创建新的 LayoutParams
对象时丢失了 相对定位 属性。请记住,像 layout_toEndOf
这样的属性是布局参数的一部分。
试试这个:
val w = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45f, resources.displayMetrics)
btn_ran.setOnClickListener {
btn_1.updateLayoutParams { this.width = w }
btn_3.updateLayoutParams { this.width = w }
btn_4.updateLayoutParams { this.width = w }
btn_2.updateLayoutParams { this.width = w }
btn_5.updateLayoutParams { this.width = w }
}
这利用了作为 Core KTX 库一部分的 the updateLayoutParams
extension function。它将使 LayoutParams
的所有内容保持不变,但也允许您修改宽度。
如果你不会用Core KTX,那你可以再啰嗦一点。用这样的东西替换每个调用:
val params1 = btn_1.layoutParams
params1.width = w
btn_1.layoutParams = params1
我在相对布局中有五个按钮,如果我尝试动态更改它们的高度,一些按钮就会消失。
How buttons are looking before clicking
Buttons after clicking
val w = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45f, resources.displayMetrics)
btn_ran.setOnClickListener {
btn_1.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
btn_3.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
btn_4.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
btn_2.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
btn_5.layoutParams = RelativeLayout.LayoutParams(w.toInt(), 700)
}
我只想在点击按钮时随机更改所有按钮的高度。
如果你只想把height
改成随机值你可以这样做:
button1.setOnClickListener {
val h = (100..500).random() //random integer between 100 and 500
button1.layoutParams.height = h
button2.layoutParams.height = h
button1.requestLayout() //refresh layout
}
我怀疑您在创建新的 LayoutParams
对象时丢失了 相对定位 属性。请记住,像 layout_toEndOf
这样的属性是布局参数的一部分。
试试这个:
val w = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45f, resources.displayMetrics)
btn_ran.setOnClickListener {
btn_1.updateLayoutParams { this.width = w }
btn_3.updateLayoutParams { this.width = w }
btn_4.updateLayoutParams { this.width = w }
btn_2.updateLayoutParams { this.width = w }
btn_5.updateLayoutParams { this.width = w }
}
这利用了作为 Core KTX 库一部分的 the updateLayoutParams
extension function。它将使 LayoutParams
的所有内容保持不变,但也允许您修改宽度。
如果你不会用Core KTX,那你可以再啰嗦一点。用这样的东西替换每个调用:
val params1 = btn_1.layoutParams
params1.width = w
btn_1.layoutParams = params1