Saya memiliki tata letak linier yang terdiri dari tampilan gambar dan tampilan teks, satu di bawah yang lain dalam tata letak linier.
<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>
Beberapa aturan mungkin hilang, ini untuk memberikan gambaran, bagaimana tata letak terlihat. Saya ingin tampilan teks kecil lain katakan 50dip panjang dan lebar, ditempatkan di atas imageview, dengan "lebih" Maksud saya z-indeks lebih dari imageview, saya ingin menempatkan ini, di tengah dan di atas (tumpang tindih) imageview.
Saya ingin tahu bagaimana kita dapat menempatkan satu tampilan di atas yang lain, dengan indeks-z yang bervariasi (lebih disukai dalam tata letak linier)?
sumber
Cobalah
.bringToFront()
:http://developer.android.com/reference/android/view/View.html#bringToFront%28%29
sumber
RelativeLayout bekerja dengan cara yang sama, gambar terakhir dalam tata letak relatif menang.
sumber
Mengubah urutan undian
Alternatifnya adalah mengubah urutan pandangan yang diambil oleh orang tua. Anda dapat mengaktifkan fitur ini dari ViewGroup dengan memanggil setChildrenDrawingOrderEnabled (true) dan mengganti getChildDrawingOrder (int childCount, int i) .
Contoh:
Keluaran:
Memanggil
OrderLayout#setDrawOrder(int)
dengan hasil 0-1-2 di:sumber
Anda dapat menggunakan
view.setZ(float)
mulai dari API level 21. Di sini Anda dapat menemukan info lebih lanjut.sumber
Compatibility: API < 21: No-op
. Jadi saya pikir itu tidak akan berhasilSaya memecahkan masalah yang sama dengan menambahkan
android:elevation="1dp"
ke tampilan yang Anda inginkan di atas yang lain. Tapi itu tidak bisa ditampilkan di bawah 5.0, dan itu akan memiliki sedikit bayangan, jika Anda bisa menerimanya, tidak apa-apa.Jadi, solusi paling benar yaitu @kcoppock berkata.
sumber
Coba ini di RelativeLayout:
Ini bekerja untuk saya.
sumber
Ada cara untuk menggunakan LinearLayout. Cukup atur marginTop elemen Anda sebelumnya ke nilai negatif yang sesuai, dan pastikan elemen yang Anda inginkan di atas adalah setelah elemen yang Anda inginkan di bawah ini di XML Anda.
sumber
AFAIK Anda tidak dapat melakukannya dengan tata letak linier, Anda harus pergi untuk RelativeLayout .
sumber
Jika Anda menambahkan Lihat secara terprogram, Anda dapat menggunakan
yourLayout.addView(view, 1);
mana
1 is the index
.sumber
Saya menggunakan ini, jika Anda ingin hanya satu tampilan yang dibawa ke depan saat dibutuhkan:
containerView adalah wadah tampilan yang akan disortir, topView adalah tampilan yang ingin saya miliki sebagai yang teratas dalam wadah.
untuk beberapa tampilan diatur adalah akan menggunakan setChildrenDrawingOrderEnabled (true) dan mengesampingkan getChildDrawingOrder (int childCount, int i) seperti yang disebutkan di atas.
sumber