2012.02.11 22:55
skąd się bierze android.R.layout.simple_spinner_item
Jak się tworzy spinner (znaczy, listę rozwijaną), trzeba napisać:
ArrayAdapter adapterKategorii = ArrayAdapter.createFromResource(this, R.array.kategorie, android.R.layout.simple_spinner_item);
Można się zastanawiać, skąd się bierze ten cały android.R.layout.simple_spinner_item. Jak się na niego kliknie w Eclipsie, to się pojawia informacja, że pochodzi on z pliku c:\\Program Files\\Android\\android-sdk\\platforms\\android-4\\android.jar. Jak się ma zainstalowany dekompilator jd-gui, to tego jara można sobie zdekompilować poleceniem "jd-gui android.jar", ale to nie jest ciekawe - bo się po prostu zobaczy, że w klasie android.r.layout (która jest wewnętrzną klasą w klasie android.R) jest statyczne pole typu int z jakąś czarodziejską liczbą będącą id tego layoutu. Sam layout jest w środu w jarze, w pliku resources.arsc (znaczy w pliku ze skompilowanymi zasobami). Jak się ma zainstalowany apktool, można sobie zdekompilować te zasoby poleceniem "apktool d android.jar". Wynikiem dekompilacji jest katalog, w którym trzeba na nos - no bo przecież nie po tym id wyczytanym z klasy R - poszukać odpowiedniego pliku z layoutem. Zresztą trudno go znaleźć nie jest, leży w res/layout/simple_spinner_item.xml. I już go można sobie obejrzeć. A jak chce się go zmienić, to trzeba w swoim projekcie stworzyć plik res/layout/moj_spinner_item.xml, w niego wkopiować treść pliku simple_spinner_item.xml (tego będącego wynikiem dekompilacji), usunąć zeń id, ładnie go sformatować, pozmieniać co się chce. A potem w kodzie napisać:
ArrayAdapter adapterKategorii = ArrayAdapter.createFromResource(this, R.array.kategorie, R.layout.moj_spinner_item);