我添加了一个自定义视图作为LinearLayout的子项。无论父视图组如何,我都需要将此自定义视图锚定到底部。我就是这样做的。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!drawn) {
drawn = true;
Rect rect = new Rect();
((View) getParent()).getGlobalVisibleRect(rect);
setY(rect.bottom - rect.top - getContext().getResources().getDimension(R.dimen.bottom_bar_height));
setZ(UiUtils.dpToPx(8f));
forceLayout();
bringToFront();
} else {
binding.bottomBarLl.draw(canvas);
}
}
当我将自定义视图添加到LinearLayout父级时,如果此子级上方的子级具有match_parent高度,则此子级不会显示。
以下是布局检查器的屏幕截图,其中显示了布局但未显示的内容。
检查器还显示自定义视图的getZ()为24。
我正在为API级别21+构建,但我也在onDraw()中尝试了((View) getParent()).invalidate();
和getParent().requestLayout();
,但没有任何好处。
bringToFront
在API级别1中添加
void bringToFront()
更改视图的z顺序 树,所以它在其他兄弟视图之上。这个订单改变 如果父容器使用依赖于订单,则可能会影响布局 布局方案(例如,LinearLayout)。在KITKAT之前,这种方法应该 然后在视图上调用requestLayout()和invalidate() 父级强制父级使用新的子级排序重绘。
这应该有效,但不适合我。我做错了什么?
答案 0 :(得分:0)
像其他无法使用LinearLayout的问题一样,我最后也使用了协调器布局,其中线性布局和我的自定义视图是兄弟姐妹,事情正常。如果有人能够解释文档,那将会很棒,因为它会产生误导。