У меня есть линейный макет, который состоит из изображения и текста, один под другим в линейном макете.
<LinearLayout android:orientation="horizontal" ... >
<ImageView
android:id="@+id/thumbnail"
android:layout_weight="0.8"
android:layout_width="0dip"
android:layout_height="fill_parent">
</ImageView>
<TextView
android:id="@+id/description"
android:layout_weight="0.2"
android:layout_width="0dip"
android:layout_height="wrap_content">
</TextView>
Некоторые правила могут отсутствовать, чтобы дать представление о том, как выглядит макет. Я хочу еще одно небольшое текстовое представление, скажем, 50dip по длине и ширине, расположенное над изображением, под словом «над» я имел в виду z-index больше, чем изображение, я хочу разместить его в центре и выше (перекрывая) изображения.
Я хочу знать, как мы можем разместить одно представление над другим, с переменным z-индексом (предпочтительно в линейном расположении)?
источник
Попробуйте
.bringToFront()
:http://developer.android.com/reference/android/view/View.html#bringToFront%28%29
источник
RelativeLayout работает так же, последнее изображение в относительной компоновке выигрывает.
источник
Изменение порядка розыгрыша
Альтернативой является изменение порядка отображения представлений родителем. Вы можете включить эту функцию из ViewGroup, вызвав setChildrenDrawingOrderEnabled (true) и переопределив getChildDrawingOrder (int childCount, int i) .
Пример:
Вывод:
Вызов
OrderLayout#setDrawOrder(int)
с 0-1-2 приводит к:источник
Вы можете использовать,
view.setZ(float)
начиная с уровня API 21. Здесь вы можете найти больше информации.источник
Compatibility: API < 21: No-op
. Поэтому я думаю, что это не сработаетЯ решил ту же проблему, добавив
android:elevation="1dp"
в какой вид вы хотите его поверх другого. Но он не может отображаться ниже 5.0, и у него будет небольшая тень, если вы можете принять его, все в порядке.Итак, самое правильное решение - @kcoppock.
источник
Попробуйте это в RelativeLayout:
Меня устраивает.
источник
Есть способ использовать LinearLayout. Просто установите для marginTop вашего предыдущего элемента соответствующее отрицательное значение и убедитесь, что элемент, который вы хотите поместить сверху, находится после элемента, который вы хотите расположить ниже в своем XML.
источник
AFAIK, вы не можете сделать это с линейными макетами, вам придется пойти на RelativeLayout .
источник
Если вы добавляете представление программно, вы можете использовать
yourLayout.addView(view, 1);
где
1 is the index
.источник
Я использую это, если вы хотите, чтобы только один вид выводился на передний план при необходимости:
containerView - это контейнер видов, которые нужно отсортировать, topView - это вид, который я хочу иметь как самый верхний в контейнере.
для организации нескольких представлений собирается использовать setChildrenDrawingOrderEnabled (true) и переопределить getChildDrawingOrder (int childCount, int i), как упомянуто выше.
источник