FrameLayout的宽度永远不会真正为0

时间:2018-07-09 13:46:32

标签: android kotlin android-constraintlayout android-framelayout

我目前正在使用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的值。 这是一个已知的错误吗?如果是,那么有人知道解决方法吗?

如果您需要任何其他信息,请告诉我。预先感谢!

1 个答案:

答案 0 :(得分:3)

那根本不是一个错误。在约束布局中,0dp被评估为match_constraint,它将根据您定义的约束占用空间。

如文档所述:

  

小部件的尺寸可以通过设置    3中的android:layout_widthandroid: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 guideon its docs上详细了解ConstraintLayout