簡體   English   中英

自定義子視圖BringToFront無法按預期工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM