FrameLayout 的宽度永远不会真正为 0
Width of FrameLayout never truly 0
我目前遇到了一个关于 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 似乎从未达到 "true" 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 宽度及其测量宽度均未达到 0 值。
这是已知错误吗?如果是,有人知道解决方法吗?
如果您需要任何进一步的信息,请告诉我。提前致谢!
这根本不是错误。在约束布局中,0dp
被评估为 match_constraint
,它将根据您定义的约束占用 space。
如文档所述:
The dimension of the widgets can be specified by setting the
android:layout_width
and android:layout_height
attributes in 3
different ways:
1- Using a specific dimension (either a literal value such as 123dp or a
Dimension reference);
2- Using WRAP_CONTENT
, which will ask the widget to compute its own size;
3- Using 0dp, which is the equivalent of MATCH_CONSTRAINT
.
如果您的目标是让视图消失,您可以更改其可见性而不是更改宽度或高度。
val view: View = findViewById(R.id.yourView)
view.visibility = View.GONE // Or View.INVISIBLE
现在,如果您想更改 width/height 用于动画目的或任何其他原因,请将其更改为 1dp 或适合您需要的任何其他大小。
您可以在 Android training guide and on its docs 上阅读有关 ConstraintLayout
的更多信息。
我目前遇到了一个关于 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 似乎从未达到 "true" 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 宽度及其测量宽度均未达到 0 值。 这是已知错误吗?如果是,有人知道解决方法吗?
如果您需要任何进一步的信息,请告诉我。提前致谢!
这根本不是错误。在约束布局中,0dp
被评估为 match_constraint
,它将根据您定义的约束占用 space。
如文档所述:
The dimension of the widgets can be specified by setting the
android:layout_width
andandroid:layout_height
attributes in 3 different ways:1- Using a specific dimension (either a literal value such as 123dp or a Dimension reference);
2- Using
WRAP_CONTENT
, which will ask the widget to compute its own size;3- Using 0dp, which is the equivalent of
MATCH_CONSTRAINT
.
如果您的目标是让视图消失,您可以更改其可见性而不是更改宽度或高度。
val view: View = findViewById(R.id.yourView)
view.visibility = View.GONE // Or View.INVISIBLE
现在,如果您想更改 width/height 用于动画目的或任何其他原因,请将其更改为 1dp 或适合您需要的任何其他大小。
您可以在 Android training guide and on its docs 上阅读有关 ConstraintLayout
的更多信息。