Definiowanie kolejności z widoków RelativeLayout w Androidzie

Chciałbym zdefiniować kolejność z widoków relatywnego pliku w Androidzie.

Wiem, że jednym ze sposobów jest wywołanie bringToFront. Czy są na to lepsze sposoby? Byłoby świetnie, gdybym mógł zdefiniować kolejność z w układzie XML.
Author: hpique, 2010-04-10

11 answers

Najprostszym sposobem jest zwrócenie uwagi na kolejność dodawania widoków do pliku XML. Niżej w dół w pliku oznacza wyżej w osi Z.

Edytuj: Jest to udokumentowane tutaj i TUTAJ na stronie dewelopera Androida. (Dzięki @flightplanner)

 286
Author: Steve Haley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-12 18:09:33

Jeśli chcesz to zrobić w kodzie you can do

View.bringToFront();

Zobacz docs

 83
Author: QAMAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-13 06:13:33

Proszę zauważyć, że przyciski i inne elementy w API 21 i nowszych mają dużą wysokość i dlatego ignorują kolejność elementów xml niezależnie od układu nadrzędnego. Trochę mi to zajęło.

 48
Author: Daniel Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-19 12:13:51

Napotkałem te same problemy: we względnym układzie parentView mam 2 dzieci childView1 i childView2. Na początku umieszczam childView1 nad childView2 i chcę, aby childView1 był na szczycie childView2. Zmiana kolejności dziecięcych poglądów nie rozwiązała dla mnie problemu. Dla mnie zadziałało ustawienie android:clipchildren="false" na parentView i w kodzie ustawiłem:

childView1.bringToFront();

parentView.invalidate();
 13
Author: Tony Vu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-01 09:08:54

W Androidzie, począwszy od poziomu API 21, elementy w pliku układu otrzymują swoją kolejność Z zarówno od tego, jak są uporządkowane w pliku, jak opisano w prawidłowej odpowiedzi, oraz od ich wysokości, wyższa wartość wysokości oznacza, że element otrzymuje wyższą kolejność Z.

Może to czasami powodować problemy, szczególnie w przypadku przycisków, które często pojawiają się na górze elementów, które zgodnie z kolejnością XML powinny znajdować się pod nimi w kolejności Z. Aby to naprawić, Ustaw android:elevation elementów w układzie XML, aby dopasować kolejność Z, którą chcesz osiągnąć.

Ustawiam elewację elementu w układzie, który zacznie rzucać cień. Jeśli nie chcesz tego efektu, możesz usunąć cień za pomocą kodu w następujący sposób:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   myView.setOutlineProvider(null);
}

Nie znalazłem sposobu na usunięcie cienia widoku podwyższonego za pomocą XML układu.

 12
Author: lejonl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-24 14:55:55

Należy pamiętać, że można używać view.setZ(float) począwszy od poziomu API 21. tutaj znajdziesz więcej informacji.

 11
Author: Vadim Kotov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 15:59:55

Pomyślałem, że dodam odpowiedź od czasu wprowadzenia

Android: translationZ

Pole XML trochę zmieniło. Inne odpowiedzi sugerujące bieganie

childView1.bringToFront();

parentView.invalidate();

Są całkowicie na miejscu, z wyjątkiem tego, że ten kod nie spowoduje wyświetlenia childView1 przed dowolnym widokiem z zakodowanym na twardo Androidem: translationZ w pliku XML. Miałem z tym problemy i po usunięciu tego pola z innych widoków, funkcja bringToFront () działała dobrze.

 9
Author: ThePartyTurtle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-20 18:08:36

ChildView.bringToFront() nie działa dla mnie, więc ustawiłem tłumaczenie z ostatnio dodanego elementu (tego, który nakładał wszystkie inne dzieci) na wartość ujemną, jak tak:

lastView.setTranslationZ(-10);

Zobacz https://developer.android.com/reference/android/view/View.html#setTranslationZ (float) więcej

 3
Author: kip2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-17 00:30:33

API 21 mA view.setElevation(float) wbudowane

Użyj ViewCompat.setElevation(view, float); dla zgodności wstecznej

Więcej metod ViewCompat.setZ(v, pixels) i ViewCompat.setTranslationZ(v, pixels)

Anther way Zbierz przyciski lub tablicę widoku i dodaj ją na końcu

 3
Author: Qamar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-02 10:44:18

Możesz użyć niestandardowego RelativeLayout z redefiniowanym

protected int getChildDrawingOrder (int childCount, int i)

Bądź świadomy-ta metoda przyjmuje param i Jako " który Widok powinienem narysować i'th". Tak działa ViewPager. Ustawia Niestandardowy porządek rysowania w połączeniu z PageTransformer.

 1
Author: Petrov Dmitrii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-05 15:18:03

Sprawdź, czy masz jakieś wzniesienie na jednym z widoków w XML. Jeśli tak, dodaj wzniesienie do drugiego elementu lub usuń wzniesienie, aby rozwiązać problem. Stąd to kolejność poglądów dyktuje to, co jest ponad drugim.

 0
Author: The Fluffy T Rex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 08:30:27