Od kilku dni próbuję zwiększyć wydajność moich układów, konwertując z kilku poziomów zagnieżdżonych LinearLayouts
na jeden RelativeLayout
i napotkałem kilka problemów, których nie mogłem znaleźć obejścia ...
Przeszukałem grupę początkujących użytkowników Androida i tę witrynę i nie udało mi się znaleźć niczego, co pomogłoby mi rozwiązać problem.
Czytałem na jednym z blogów, że można łączyć układy ze scalaniem i dołączaniem tagów. Mam więc główny plik układu z RelativeLayout
elementem głównym. Wewnątrz tego mam 5 tagów include, które odwołują się do 5 różnych plików układu XML, z których każdy ma element scalający dla katalogu głównego (wszystkie moje pliki scalające są takie same, z wyjątkiem identyfikatorów w nich).
Mam dwa problemy, które wyjaśnię po opublikowaniu uproszczonej wersji mojego kodu układu:
Przykładowy plik układu głównego:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/translucent_gray" >
<include
android:id="@+id/running_gallery_layout_id"
layout="@layout/running_gallery_layout" />
<include
android:id="@+id/recent_gallery_layout_id"
layout="@layout/recent_gallery_layout"
android:layout_below="@id/running_gallery_layout_id" />
<include
android:id="@+id/service_gallery_layout_id"
layout="@layout/service_gallery_layout"
android:layout_below="@id/recent_gallery_layout_id" />
<include
android:id="@+id/process_gallery_layout_id"
layout="@layout/process_gallery_layout"
android:layout_below="@id/service_gallery_layout_id" />
</RelativeLayout>
Przykładowy dołączony plik scalający:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
style="@style/TitleText"
android:id="@+id/service_gallery_title_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="@string/service_title" />
<Gallery
android:id="@+id/service_gallery_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@id/service_gallery_title_text_id" />
<TextView
style="@style/SubTitleText"
android:id="@+id/service_gallery_current_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/service_gallery_title_text_id"
android:layout_above="@id/service_gallery_id" />
</merge>
Mam dwa problemy:
1) android:layout_*
Atrybuty wydają się być ignorowane, gdy są używane w tagu włączania, a wszystkie scalone układy są wyświetlane jeden na drugim. Zgodnie z tym postem ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) „ android:layout_*
z <include />
tagiem można użyć dowolnego atrybutu ”
2) Ponieważ nie mogłem tego uruchomić, postanowiłem spróbować dodać android:layout_below
atrybut do pierwszego TextView
elementu w każdym pliku układu scalania, co oznacza, że każdy plik scalania będzie odnosił się do identyfikatora z innego pliku układu scalania ... W większości przypadków to faktycznie zadziałało, a mój układ wygląda dobrze. Jednak pojawia się błąd w jednym z android:layout_below
atrybutów, który mówi, że nie może znaleźć identyfikatora, który podałem ... Podwójnie i potrójnie sprawdziłem identyfikatory, aby upewnić się, że są poprawne. Najdziwniejsze jest to, że użyłem tej AutoFill
funkcji, aby umieścić identyfikator w atrybucie na pierwszym miejscu.
Jeśli ktoś ma jakieś sugestie lub obejścia, z przyjemnością je wypróbuję. Poza tym, jeśli ktoś może wymyślić sposób, w jaki mógłbym mieć tylko jeden plik układu scalonego XML zamiast 5, byłoby to bardzo mile widziane. Nie mogłem znaleźć sposobu, aby to zrobić, ponieważ muszę mieć dostęp do każdego elementu w plikach układu scalania w czasie wykonywania ...