0

У меня есть пользовательский вид, добавленный как дочерний элемент LinearLayout. Мне нужен этот пользовательский вид для привязки к низу независимо от родительской группы просмотра. Вот как я это делаю.Пользовательский дочерний вид bringToFront не работает как ожидалось

@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 высоты, это один не показывает.

Ниже приведен скриншот от инспектора макета, где показано, что он выложен, но не отображается.

enter image description here

Инспектор также показывает, что Getz() пользовательского зрения 24.

Я строю для уровня API 21+, но я также пытался ((View) getParent()).invalidate(); и getParent().requestLayout(); в OnDraw() ни к чему хорошему.

Из документации для View.bringToFront()

BringToFront

Добавлено в уровне API 1

аннулируются BringToFront()

Изменение г порядка мнение, в дерево, так что на наверху других взглядов братьев и сестер. Это изменение порядка может повлиять на макет, если родительский контейнер использует схему компоновки , зависящую от заказа (например, LinearLayout). До KITKAT этому методу должно следовать вызовами requestLayout() и invalidate() в родительском элементе представления , чтобы заставить родителя перерисовывать с новым дочерним упорядочением.

Это должно работать, но это не для меня. Что я делаю неправильно?

ответ

0

Как и другие вопросы, которые не могли заставить его работать с LinearLayout, я также использовал схему координатора, в конце концов, где линейная компоновка и мой пользовательский вид являются братьями и сестрами, и все работает нормально. Было бы здорово, если бы кто-нибудь мог объяснить документацию, так как это вводит в заблуждение иначе.