Вид вывести на фронт не работает

Я хочу изменить 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();
Другие вопросы по тегам