Hej!
Programowałem ostatnio sporo w WPF i projektowałem formatki w XAMLu, więc sporo sobie obiecywałem po Androidowym XMLu. Tymczasem im więcej o nim czytam, tym bardziej jestem przekonany, że projektować okienka w XMLu po prostu mi się nie opłaca.
Najbardziej nie odpowiada mi, że nie mam w kodzie bezpośredniego dostępu do komponentów - za każdym razem muszę zawołać getViewById() i wykonać cast na właściwy view. Wiem, że XAML przy Androidowym XMLu to fajerwerki i porównywać ich nie ma sensu, ale - prawdę mówiąc - oczekiwałem, że choć komponenty będą widoczne poprzez nazwę, bez dodatkowego kodu. Po przeczytaniu dokumentacji na temat dostępu do komponentów natychmiast stwierdziłem, że pierwszym co zrobię, będzie napisanie metody, która na samym początku wczyta wszystkie komponenty do odpowiednich pól klasy, aby ograniczyć liczbę niepotrzebnych wywołań getViewById(). Tyle że jeśli chwilę się zastanowić, to taką implementację już tylko krok dzieli od metody, która oprócz załadowania komponentów do pól activity, chwilę wcześniej po prostu je utworzy (a kodu, na dobrą sprawę, będzie mniej więcej tyle samo - każdy atrybut XMLa wystarczy przepisać na pojedyncze wywołanie settera Javy).
Kolejnym aspektem, który mi nie odpowiada jest fakt, iż - z tego, co zrozumiałem (proszę mnie poprawić, jeśli piszę bzdury) - XML jest interpretowany w czasie uruchomienia. Innymi słowy, tak czy kwak ktoś tworzy, jeden po drugim, zaprojektowane wcześniej kontrolki - z tą tylko różnicą, że wcześniej sparsowany musi zostać odpowiedni plik XML. W praktyce więc skorzystanie z XMLa równa się w tym miejscu tylko niewielkiemu opóźnieniu w uruchomieniu programu, efekt końcowy jest taki sam. Dla kontrastu dodam tylko, że XAML podczas kompilacji jest przekształcany w kod C#, więc podczas uruchamiania programu nie ma mowy o żadnym parsowaniu. Natomiast wspomniane rozwiązanie istnieje też w Delphi (mowa o plikach DFM włączanych w zasoby programu).
Jestem programistą od kilkunastu lat i po przebrnięciu przez VCL, Windows Forms i - ostatnio - Windows Presentation Foundation z XAMLem argument o możliwości wyklikania interface'u już do mnie nie przemawia, nie pamiętam, kiedy ostatnio użyłem toolboxa do posadzenia kontrolki na formatce 🙂 Czy poza wspomnianym argumentem istnieją jakieś inne powody, dla których warto korzystać z XMLa?
Proszę tylko o właściwe odebranie mojego pytania. Daleko mi od flame-wara pod tytułem "XML w Androidzie jest do kitu", po prostu chcę wybrać wygodniejszy dla mnie sposób programowania, a do tej pory wygodniejsze (i nawet odrobinę wydajniejsze) wydaje mi się konstruowanie layoutu z kodu. Nie mam jednak zbyt dużo doświadczenia w pisaniu Androidowego kodu i być może nieświadomie idę ścieżką, która w późniejszym czasie doprowadzi do utrudnień w rozwijaniu i konserwacji programu.
Pozdrawiam -- Spook.