[英]Custom child view bringToFront not working as expected
我有一個自定義視圖添加為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+構建,但我也嘗試過((View) getParent()).invalidate();
和getParent().requestLayout();
在onDraw()上效果不好。
從View.bringToFront()的文檔中
帶到前
在API級別1中添加
無效BringToFront()
在樹中更改視圖的z順序,因此它位於其他同級視圖的頂部。 如果父容器使用依賴於順序的布局方案(例如LinearLayout),則此順序更改可能會影響布局。 在使用KITKAT之前,應先在視圖的父級上調用requestLayout()和invalidate(),以強制父級以新的子級順序重繪。
這應該可以,但是不適合我。 我做錯了什么?
像其他無法使用LinearLayout的問題一樣,我最終也使用了協調器布局,其中線性布局和我的自定義視圖是同級,並且工作正常。 但是,如果有人可以解釋該文檔將非常有用,因為否則會誤導您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.