Android'de bir RelativeLayout görünümlerinin z sırasını tanımlamak istiyorum.
Bunu yapmanın bir yolunun çağırdığını biliyorum bringToFront
.
Bunu yapmanın daha iyi bir yolu var mı? Xml düzeninde z sırasını tanımlayabilirsem harika olurdu.
Android'de bir RelativeLayout görünümlerinin z sırasını tanımlamak istiyorum.
Bunu yapmanın bir yolunun çağırdığını biliyorum bringToFront
.
Bunu yapmanın daha iyi bir yolu var mı? Xml düzeninde z sırasını tanımlayabilirsem harika olurdu.
Yanıtlar:
En kolay yol, Görünümlerin XML dosyanıza eklendiği sıraya dikkat etmektir. Dosyada aşağı inmek Z ekseninde yukarı doğru demek.
Düzenleme: Bu, burada ve burada Android geliştirici sitesinde belgelenmiştir . (Teşekkürler @flightplanner)
API 21 ve sonraki sürümlerdeki düğmelerin ve diğer öğelerin yüksek bir yüksekliğe sahip olduğunu ve bu nedenle üst düzenden bağımsız olarak öğelerin xml sırasını göz ardı ettiğini lütfen unutmayın. Bunu anlamak için bana biraz zaman ayırdı.
Android'de API düzey 21'den başlayarak, düzen dosyasındaki öğeler Z sırasını doğru yanıtta açıklandığı gibi dosya içinde nasıl sıralandıklarından alır ve yüksekliklerinden daha yüksek bir yükseklik değeri, öğenin daha yüksek bir Z sırası aldığı anlamına gelir. .
Bu bazen sorunlara neden olabilir, özellikle de XML'nin sırasına göre Z sırasının altında olması gereken öğelerin üstünde sıkça görülen düğmelerle. Bunu düzeltmek android:elevation
için düzen XML'nizdeki öğeleri, elde etmek istediğiniz Z sırasına uyacak şekilde ayarlayın.
Düzende bir öğenin yüksekliğini ayarladım, gölge oluşturmaya başlayacak. Bu efekti istemiyorsanız gölgeyi aşağıdaki gibi kodla kaldırabilirsiniz:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
myView.setOutlineProvider(null);
}
Yükseltilmiş bir görünümün gölgesini düzen xml'sinden kaldırmanın herhangi bir yolunu bulamadım.
android:elevation="1000dp"
. Bu şekilde gölge yapılmaz.
Aynı sorunlarla karşılaştım: Göreli düzen parentView, 2 çocuk childView1 ve childView2 var. İlk başta childView1'i childView2'nin üstüne koydum ve childView1'in childView2'nin üstünde olmasını istiyorum. Çocukların görüşlerinin sırasını değiştirmek sorunu benim için çözmedi. Benim için ne çalıştı parentView ve ayarladığım kodda android: clipChildren = "false" ayarlamaktır:
childView1.bringToFront();
parentView.invalidate();
child.bringToFront()
ile parent.invalidate()
işler ama parent.bringChildToFront(child)
yok. Bir işletim sisteminden hepimizin beklediği mantık nerede?
android:clipChildren="false"
hile yaptı. Teşekkür ederim!
view.setZ(float)
API düzeyi 21'den başlayarak kullanabileceğinizi lütfen unutmayın . Burada daha fazla bilgi bulabilirsiniz.
Girişinden bu yana bir cevap ekleyeceğimi düşündüm
android: ÇeviriZ
XML alanı işleri biraz değiştirdi. Koşmayı öneren diğer cevaplar
childView1.bringToFront();
parentView.invalidate();
Bu kod, XML dosyasında bir sabit kodlu android: translationZ ile herhangi bir görünümün önünde childView1'i getirmeyeceği DIŞINDA tamamen nokta. Bu sorun yaşıyordum ve bir kez diğer alanlardan bu alanı kaldırdık, bringToFront () gayet iyi çalıştı.
elevation
API 21'de view.setElevation(float)
yerleşik
ViewCompat.setElevation(view, float);
Geriye dönük uyumluluk için kullanın
Diğer yöntemler ViewCompat.setZ(v, pixels)
veViewCompat.setTranslationZ(v, pixels)
Başka bir yol düğmeleri toplamak veya dizi görüntülemek ve addView
RelativeLayout'a eklemek için kullanın
childView.bringToFront () benim için çalışmadı, bu yüzden en son eklenen öğenin Z çevirisini (diğer tüm çocukları üst üste bindiren) şöyle negatif bir değere ayarladım:
lastView.setTranslationZ(-10);
daha fazla bilgi için bkz. https://developer.android.com/reference/android/view/View.html#setTranslationZ(float)
Yeniden RelativeLayout
tanımlanmış ile özel kullanabilirsiniz
protected int getChildDrawingOrder (int childCount, int i)
Dikkatli olun - bu yöntem i
"hangi görüşü çizmeliyim? i'th
" İşte böyle ViewPager
çalışır. İle birlikte özel çizim sırası ayarlar PageTransformer
.
XML'deki Görünümlerden birinde yükseklik olup olmadığını kontrol edin. Öyleyse, sorunu çözmek için diğer öğeye yükseklik ekleyin veya yükselişi kaldırın. Oradan, diğerinin üstüne gelenleri dikte eden görüşlerin sırasıdır.