我想定義Android中RelativeLayout視圖的z順序。在Android中定義RelativeLayout視圖的Z順序
我知道這樣做的一種方法是撥打bringToFront
。
是否有更好的方法來做到這一點?如果我可以在佈局xml中定義z順序,那將是非常好的。
我想定義Android中RelativeLayout視圖的z順序。在Android中定義RelativeLayout視圖的Z順序
我知道這樣做的一種方法是撥打bringToFront
。
是否有更好的方法來做到這一點?如果我可以在佈局xml中定義z順序,那將是非常好的。
我遇到了同樣的問題:在一個相對佈局parentView,我有2個孩子childView1和childView2。起初,我把childView1放在childView2的上面,我想讓childView1放在childView2的上面。改變兒童觀點的順序並不能解決我的問題。什麼工作對我來說是設置機器人:clipChildren =上parentView和代碼「假」我設置:
childView1.bringToFront();
parentView.invalidate();
這是工作,Android讓我很傷心。 ''child.bringToFront()'用'parent.invalidate()'工作,但'parent.bringChildToFront(child)'不。我們都期望從操作系統中獲得什麼邏輯? – 2015-05-06 15:21:43
在'LinearLayout'中弄亂了孩子們的訂單... – 2015-07-10 12:05:10
請注意,您可以使用view.setZ(float)
從API級別開始21 Here你可以找到更多信息。
setz在API級別21以下不可用。並bringtoFront()有閃爍的問題。任何想法實現相同? – 2016-02-15 10:50:47
想我會添加一個答案,因爲引進了
的android:translationZ
XML領域變化的東西一點點。在XML文件中translationZ:該建議運行
childView1.bringToFront();
parentView.invalidate();
其他的答案是完全當場就除了這個代碼不會帶來childView1在任何視圖中的正面配有一塊硬編碼的機器人。我遇到了這個問題,一旦我從其他視圖中刪除了這個字段,bringToFront()就工作得很好。
這對於android 5的「海拔」也是如此。 – shelll 2015-08-20 16:43:53
可以使用自定義RelativeLayout
與重新定義
protected int getChildDrawingOrder (int childCount, int i)
注意 - 此方法需要PARAM i
作爲 「這觀點我應該吸取i'th
」。 這是ViewPager
的工作原理。它與PageTransformer
一起設置自定義繪圖順序。
childView。bringToFront()並沒有爲我工作,所以我設置了至少最近添加的項目(這就是一個覆蓋所有其他子女)爲負值,像這樣的Z翻譯:
lastView.setTranslationZ(-10);
看到https://developer.android.com/reference/android/view/View.html#setTranslationZ(float)更多
在Android中從API級別21開始,在佈局文件中的項目得到他們是如何在文件中有序,在正確答案描述,並從他們擡高他們的Z順序都,海拔較高值意味着物品得到更高的Z順序。
這有時會引起問題,特別是經常出現在項根據XML的順序應低於它們的Z次序的頂部的按鈕。要解決這個問題,只需將佈局XML中項目的android:elevation
設置爲與要實現的Z順序相匹配即可。
我你設置佈局元素的高度將開始蒙上了一層陰影。如果你不想要這個效果,你可以用代碼中刪除的影子,像這樣:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
myView.setOutlineProvider(null);
}
我還沒有發現任何方式,通過佈局文件刪除正視圖的影子。
請注意,在API按鈕和其他元件21和更大的具有高海拔,因此忽略元素的XML順序考慮父佈局。花了我一段時間來弄清楚這一點。
是的,它確實如此。花了我幾個小時才意識到它.. – aldok 2017-01-20 22:25:31
對於我來說,這個錯誤的解決方案是在我想在按鈕上呈現的視圖上調用setElevation(1000)。 – Shaegorath 2017-05-22 16:23:10
謝謝。在閱讀您的答案之前,我摸了一下頭,然後理解爲什麼在稍後添加的廣告視圖上方顯示一個按鈕。 – Hong 2017-10-19 21:40:40
API 21具有view.setElevation(float)
內建
使用ViewCompat.setElevation(view, float);
爲了向後兼容
更多方法ViewCompat.setZ(v, pixels)
和ViewCompat.setTranslationZ(v, pixels)
花葯方式收集按鈕或視圖陣列並在結束
查看添加它.bringToFront();是anser – 2016-06-22 10:24:59