2010-04-13 15 views
41

System Android jest wyposażony w wiele zasobów systemowych (android.R), dzięki czemu można zaoszczędzić czas i sprawić, że aplikacja będzie lżejsza.Przydatne zasoby systemu Android

Na przykład, niedawno odkryto, że Android zapewnia zlokalizowane ciągi dla Yes (android.R.string.yes), NO (android.R.string.no), Anuluj (android.R.string.cancel) i OK (android.R.string.ok), wśród innych ciągów.

Jakie inne zasoby systemowe są zalecane? Czy istnieje powód, aby unikać korzystania z zasobów systemowych?

Edit: Jak zauważył Tomas, niektóre z tych środków nie może produkować wyniki można oczekiwać (w szczególności android.R.string.yes/no powraca OK/Cancel zamiast Yes/No, jak donosi here). Aby uzyskać większą kontrolę, możesz kopiować zasoby systemowe z kodu źródłowego Androida.

+2

Jak uzyskać dostęp do nich z xml? –

+0

"Czy istnieje powód, aby unikać korzystania z zasobów systemowych?" - W przypadku korzystania z zasobów systemowych, takich jak ikony, nie ma gwarancji, że ta sama ikona jest dostępna we wszystkich wersjach Androida, co może spowodować niespójność aplikacji . – codeMan

+0

Głosowanie na zakończenie jako zbyt szerokie/oparte na opiniach. –

Odpowiedz

46

Możesz znaleźć pełną listę wszystkich zasobów systemowych w android package.

Za każdym razem, gdy chcę coś zrobić na Androidzie, sprawdzam, czy istnieje zasób systemu, który obejmuje to, co chcę zrobić. Przy wyszukiwaniu już zaimplementowanych zasobów przydatne jest zaimportowanie kodu źródłowego Androida (w szczególności their /res/ folder), aby można było zobaczyć jego konkretną implementację.

Osobiście znajduję się najczęściej przy użyciu:

  • Wbudowany Android układów standardowych zadań, takich jak dropdowns spinner.
  • identyfikatory Android (android.R.id), ponieważ często są wymagane do korzystania z nich, jeśli chcesz korzystać z niektórych widżetów Androidem (na przykład TabHost/TabWidget wymaga użycia „android:id/tabhost”, „android:id/tabs” i „android:id/tabcontent” jeśli chcesz zaimplementować układ XML).
  • Wbudowane kolory, szczególnie android.R.color.transparent.
  • Wbudowane w Android wbudowane i zanikające animacje w android.R.anim.
+9

Pamiętaj, że te zasoby są dostarczane razem z pakietem SDK. Zajrzyj do katalogu 'data/res /' znajdującego się pod określonym katalogiem platformy. Byłbym ostrożny, ponownie wykorzystując rzeczy, które mogą zostać zmienione przez producentów OEM - zasoby do pobrania byłyby jednym z przykładowych problemów. – CommonsWare

+0

@CommonsWare Podczas pracy na rzeczywistym urządzeniu, skąd są pobierane zasoby? – ThomasW

+0

@ThomasW: Poza "gdzieś w oprogramowaniu urządzenia", nie mogę powiedzieć, ponieważ nigdy nie szukałem szczegółów. Przepraszam! – CommonsWare

6

Jak wspomniał CommonsWare, nie trzeba pobierać repozytorium źródeł Androida, aby sprawdzić zasoby; po prostu przejdź do <android-sdk-dir>/platforms/android-X.X/data/res/. Jednakże, jeśli zaczniesz ich używać, szybko się rozczarujesz, aby dowiedzieć się, że większość z nich jest , a nie dostępna za pośrednictwem klasy android.R. W większości przypadków muszę je zaimportować do mojego obszaru roboczego Eclipse. :-(

Moje ulubione zasoby to rysunki, które pokazują inaczej na podstawie stanów skupienia/naciśnięcia/wyłączenia sterowania (np. Android.R.drawable.btn_default). Używam tych lub dostosowuję je, aby tworzyć niestandardowe przyciski dla moich aplikacji Jak widać, jeśli spojrzeć na /data/res/drawable/btn_default.xml, są one zdefiniowane jako element XML <selector>, który zostanie nadpisany w StateListDrawable w środowisku wykonawczym.Możesz również utworzyć własne StateListDrawables i są one bardzo przydatne, zarówno jako tła widoku i jako "związek odkształcalne" Button (patrz TextView.setCompoundDrawables()).

+0

Zastanawiam się, kiedy działa na rzeczywistym urządzeniu, skąd są pobierane zasoby? – ThomasW

1

Należy pamiętać, że tłumaczenia są naprawdę złe.

Na przykład niemiecki "nie" w android-25 to "Abbrechen", co w rzeczywistości oznacza "anuluj". "Tak" jest tłumaczone jako "OK" ...

Nie jestem pewien, jak dobre są inne języki, więc użyłbym własnego tłumaczenia.

+0

Nie chodzi o to, że tłumaczenia są złe. OP zauważył w swoim pytaniu, że 'android.R.string.yes/no' zwraca' OK/Cancel' zamiast 'Yes/No'. Jest tak prawdopodobnie dlatego, że deweloper uważał, że 'android.R.string.yes/no' jest bardziej zwięzły niż' android.R.string.ok/cancel'. – Patrick

+1

Ponadto, 'android.R.string.ok' nie wydaje się być przetłumaczone. Jest "OK" dla każdego testowanego przeze mnie języka. (W przypadku niektórych języków "OK" nie jest właściwe.) – ThomasW

Powiązane problemy