Вид вывести на фронт не работает
Я хочу изменить z порядок некоторых видов во время анимации
На Android выше 4.1.2 он работает просто отлично, а на андроидах ниже 4.1.2 Z-порядок не меняется, вид сверху остается сверху.
Это то, что я пытаюсь.
myView.bringToFront();
((View)myView.getParent()).invalidate();
Как заставить его работать на старых устройствах?
6 ответов
/**
* Change the view's z order in the tree, so it's on top of other sibling
* views. This ordering change may affect layout, if the parent container
* uses an order-dependent layout scheme (e.g., LinearLayout). Prior
* to {@link android.os.Build.VERSION_CODES#KITKAT} this
* method should be followed by calls to {@link #requestLayout()} and
* {@link View#invalidate()} on the view's parent to force the parent to redraw
* with the new child ordering.
*
* @see ViewGroup#bringChildToFront(View)
*/
public void bringToFront() {
if (mParent != null) {
mParent.bringChildToFront(this);
}
}
в соответствии с этим я просто пропустил
((View)myView.getParent()).requestLayout();
и это сработало!
Я попробовал все это. Предполагалось, что RelativeLayout находится над кнопкой, но он просто не хочет подчиняться.
В конце концов я решил это, добавив android:elevation="2dp"
в RelativeLayout.
Значение высоты используется только в API уровня 21 и выше. В моем случае все ниже уровня API 21 было в порядке, а все выше - нет.
Надеюсь, что это может помочь кому-то:)
Я надеюсь, что это будет полезно для кого-то. Ни одно из вышеперечисленных решений не помогло мне. Зачем? Потому что мое мнение о том, что я хочу быть в фронте, имело высоту, меньшую, чем у другого вида. Таким образом, вид с большим возвышением был всегда впереди, несмотря ни на что.
Для Api 21 или выше Существует атрибут xml, известный как translateZ
который позволяет определить уровень высоты на виде.
Вы можете в значительной степени использовать это тоже.
андроид: translateZ = "30dp"
* API>=21
Если родительское представление является относительным, то оно может работать или не работать. Я старался bringToFront
, requestLayout
, а также removeView; addView
, но не повезло. Мое решение состояло в том, чтобы поместить все в структуру кадра. То, что мне было нужно сверху, было перемещено по нижнему краю структуры кадра с невидимой видимостью, а затем в коде это было сделано видимым.
В соответствии с этим я просто пропустил строку
Эта простая линия работает для вас
yourView.bringToFront();