У меня есть пользовательский вид, добавленный как дочерний элемент 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 высоты, это один не показывает.
Ниже приведен скриншот от инспектора макета, где показано, что он выложен, но не отображается.
Инспектор также показывает, что Getz() пользовательского зрения 24.
Я строю для уровня API 21+, но я также пытался ((View) getParent()).invalidate();
и getParent().requestLayout();
в OnDraw() ни к чему хорошему.
Из документации для View.bringToFront()
BringToFront
Добавлено в уровне API 1
аннулируются BringToFront()
Изменение г порядка мнение, в дерево, так что на наверху других взглядов братьев и сестер. Это изменение порядка может повлиять на макет, если родительский контейнер использует схему компоновки , зависящую от заказа (например, LinearLayout). До KITKAT этому методу должно следовать вызовами requestLayout() и invalidate() в родительском элементе представления , чтобы заставить родителя перерисовывать с новым дочерним упорядочением.
Это должно работать, но это не для меня. Что я делаю неправильно?