我目前正在使用ConstraintLayout遇到一个奇怪的错误(?)。 我试图将作为Constraintlayout的子级的FrameLayout的宽度设置为0px。
我通过以下代码段设置宽度:
// set width
val newWidth = 0
val frameParams = frame.layoutParams as ConstraintLayout.LayoutParams
frameParams.width = newWidth
frame.layoutParams = frameParams
logE("newWidth: $newWidth, frame.measuredWidth: ${frame.measuredWidth}, frame.width: ${frame.width}")
奇怪的是,看来我的FrameLayout从未达到“真正的”宽度0px,但是一些随机值接近0。请参见下面的一些日志:
E/Log: newWidth: 0, frame.measuredWidth: 6, frame.width: 6
E/Log: newWidth: 0, frame.measuredWidth: 10, frame.width: 10
E/Log: newWidth: 0, frame.measuredWidth: 1, frame.width: 1
如您所见,FrameLayouts的宽度或其measuredWidth都不会达到0的值。 这是一个已知的错误吗?如果是,那么有人知道解决方法吗?
如果您需要任何其他信息,请告诉我。预先感谢!
答案 0 :(得分:3)
那根本不是一个错误。在约束布局中,0dp
被评估为match_constraint
,它将根据您定义的约束占用空间。
如文档所述:
小部件的尺寸可以通过设置 3中的
android:layout_width
和android:layout_height
属性 不同的方式:1-使用特定尺寸(文字值(例如123dp或a 尺寸参考);
2-使用
WRAP_CONTENT
,这将要求小部件计算自己的大小;3-使用0dp,相当于
MATCH_CONSTRAINT
。
如果您的目标是使视图消失,则可以更改其可见性,而不必更改宽度或高度。
val view: View = findViewById(R.id.yourView)
view.visibility = View.GONE // Or View.INVISIBLE
现在,如果您出于动画目的或出于其他任何原因想要更改宽度/高度,请将其更改为1dp或其他任何适合您需要的尺寸。
您可以在Android training guide和on its docs上详细了解ConstraintLayout
。