Mam układ liniowy, który składa się z podglądu obrazu i tekstu, jeden pod drugim w układzie liniowym.
<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>
Może brakować niektórych zasad, aby dać wyobrażenie o tym, jak wygląda układ. Chcę inny mały widok tekstu, powiedzmy 50dip długości i szerokości, umieszczony nad widokiem obrazu, przez „ponad” Miałem na myśli indeks Z bardziej niż widok obrazu, chcę to umieścić, pośrodku i powyżej (nakładając się) widoku obrazu.
Chcę wiedzieć, jak możemy umieścić jeden widok nad drugim, z różnym indeksem Z (najlepiej w układzie liniowym)?
Spróbuj
.bringToFront()
:http://developer.android.com/reference/android/view/View.html#bringToFront%28%29
źródło
RelativeLayout działa w ten sam sposób, wygrywa ostatni obraz w układzie względnym.
źródło
Zmiana kolejności losowania
Alternatywą jest zmiana kolejności rysowania widoków przez element nadrzędny. Możesz włączyć tę funkcję w ViewGroup, wywołując setChildrenDrawingOrderEnabled (true) i zastępując getChildDrawingOrder (int childCount, int i) .
Przykład:
Wynik:
Wywołanie
OrderLayout#setDrawOrder(int)
z 0-1-2 powoduje:źródło
Możesz użyć,
view.setZ(float)
zaczynając od poziomu API 21. Tutaj możesz znaleźć więcej informacji.źródło
Compatibility: API < 21: No-op
. Myślę więc, że to nie zadziałaRozwiązałem ten sam problem, dodając
android:elevation="1dp"
do którego widoku chcesz go nad innym. Ale nie może wyświetlić poniżej 5.0 i będzie miał trochę cienia, jeśli możesz to zaakceptować, jest w porządku.Więc najbardziej poprawne rozwiązanie, które jest @kcoppock powiedział.
źródło
Spróbuj tego w RelativeLayout:
Mi to pasuje.
źródło
Istnieje sposób użycia LinearLayout. Po prostu ustaw marginTop poprzedniego elementu na odpowiednią wartość ujemną i upewnij się, że element, który chcesz na górze, znajduje się za elementem, który chcesz poniżej w pliku XML.
źródło
AFAIK, że nie możesz tego zrobić z układami liniowymi, musisz wybrać RelativeLayout .
źródło
Jeśli programowo dodajesz widok, możesz użyć
yourLayout.addView(view, 1);
gdzie
1 is the index
.źródło
Używam tego, jeśli chcesz, aby w razie potrzeby wyświetlać tylko jeden widok:
containerView to kontener widoków do posortowania, topView to widok, który chcę mieć jako najwyższy w kontenerze.
dla wielu widoków do aranżacji ma zamiar użyć setChildrenDrawingOrderEnabled (true) i nadpisanie getChildDrawingOrder (int childCount, int i), jak wspomniano powyżej.
źródło