Android 尽管设置了尺寸,ConstraintLayout中的自定义视图最终的大小为0
我有一个自定义视图类(Android 尽管设置了尺寸,ConstraintLayout中的自定义视图最终的大小为0,android,android-constraintlayout,Android,Android Constraintlayout,我有一个自定义视图类(EmptyTableView),它通常工作正常。但是,在程序中的某个点上,我将此视图置于约束视图的中心位置,该视图突然变得不可见。进一步的研究表明,视图的位置为(0,0),大小为(0 x 0) myonMeasure()中的measureSpecs正好是0。我不知道这意味着什么,但我说当你弄乱测量模式时会发生这种情况,虽然我不知道为什么会发生在我看来。 这是源代码 在我的应用程序中,我有一个名为root的ConstraintLayout视图,它的位置可以通过DragAndD
EmptyTableView
),它通常工作正常。但是,在程序中的某个点上,我将此视图置于约束视图的中心位置,该视图突然变得不可见。进一步的研究表明,视图的位置为(0,0)
,大小为(0 x 0)
myonMeasure()中的measureSpecs
正好是0。我不知道这意味着什么,但我说当你弄乱测量模式时会发生这种情况,虽然我不知道为什么会发生在我看来。
这是源代码
在我的应用程序中,我有一个名为root的ConstraintLayout
视图,它的位置可以通过DragAndDrop
过程更改。
我的计划是让视图对所有4个边都有约束,同时通过约束的偏差来控制位置。当我开始拖动视图时,左右约束a被删除,位置由setX()
和setY()
控制。使用此方法完成此操作(Kotlin):
然后,当我结束dragandrop
时,我从拖放回调中调用以下命令,以便将视图布局移动到x和y,然后调用restoreBasies()再次连接所有4个面:
DragEvent.ACTION_DRAG_ENDED -> {
shadowTouchPoint = null // Just an intern indicator for the drag
val draggedView = event.localState as View
with(draggedView) {
visibility = View.VISIBLE
rootConstraints.clone(root)
setMargin(id, ConstraintSet.START, x.toInt())
setMargin(id, ConstraintSet.TOP, y.toInt())
rootConstraints.applyTo(root)
translationX = 0f
translationY = 0f
}
rootConstraints.clone(root)
rootConstraints.restoreBiases(draggedView, options_guide, root.height.toFloat())
rootConstraints.applyTo(root)
}
RestoreBeases():
整个代码都打开了prepareConstraintsForDrag()
和prepareBasies()
位于TableScene.kt
中。在tablePlan/ConstructEmptyTablePlan.kt
和tablePlan
目录中的EmptyTableView.kt
中的回调
这是它在活动中的大致外观:
升级到ConstraintLayout
的1.1.2版:
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
我认为在此版本之前,center()
可能存在问题。我不认为这会解决你的问题,但它可能会为找到根本问题扫清道路。换句话说,我想你会在屏幕上看到一些不同的东西
我可以说,您的指南选项\u指南以某种方式设置为屏幕的宽度。也许这是目的,但如果不是,我会研究如何设置和使用此指南。这是目的,我可以将其移入以显示菜单。非常感谢你的提示,特别是花时间回答我冗长的问题!我会尽快更新依赖项,我也会保持更新,非常感谢!好啊不管怎样,还是试试1.1.2。这就是我更新依赖项的意思:D伙计,非常感谢你,我从来没有对不起作用的东西这么高兴过^^编辑:忘了链接
fun ConstraintSet.restoreBiases(table: View, sideGuide: Guideline, height: Float) {
val xBias = table.x / (sideGuide.left - table.width).toFloat()
val yBias = table.y / (height - table.height)
center(table.id, ConstraintSet.PARENT_ID, ConstraintSet.START, 0,
sideGuide.id, ConstraintSet.START, 0, xBias)
center(table.id, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 0,
ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 0, yBias)
}
implementation 'com.android.support.constraint:constraint-layout:1.1.2'