2013-05-28 32 views
6

Mam bardzo proste pytanie:Jak uzyskać kwalifikatory dla danego zasobu (podczas korzystania z niego)?

Biorąc pod uwagę konkretny zasób (id, string, drawable, ...) z pliku R.java, czy możliwe jest określenie, które kwalifikatory miały w swoim folderze, który je dopasował? Jeśli tak to jak ?

Na przykład, jeśli moje urządzenie ma ekran o gęstości hdpi i mam tę samą nazwę pliku "x.png" w "res/drawable-hdpi" i "res/drawable-mdpi", a ja mówię o aby odszyfrować ten plik, chciałbym uzyskać to, że dostał plik z res/drawable-hdpi, i robiąc to wiedział, że ma gęstość hdpi.

Oczywiście w tym przykładzie, jeśli plik istnieje w innych folderach, ale nie w folderze hdpi, chciałbym, aby poinformował mnie, który z nich będzie używany podczas dekodowania pliku.

To samo dotyczy pozostałych kwalifikatorów (locale, screenSize, ...).

+0

jestem zainteresowany w tym pytaniu. Mam ten sam problem. Czy to rozwiązałeś? Czy odkryłeś funkcję odgadywania kwalifikatora używanego przez urządzenie w każdej sytuacji? – GmloMalo

+0

@GmloMalo Nie. Nie pamiętam, czemu to chciałem ... –

+0

Ok. Mimo to dzięki. – GmloMalo

Odpowiedz

0

Ten problem występuje bardzo często w przypadku kierowania na dużą liczbę urządzeń, dlatego postanowiłem utworzyć własną prostą aplikację, aby sprawdzić, który z nich jest używany. Here to link.

Mam nadzieję, że to pomoże.

+0

przykładowy kod nie zawiera kodu ani funkcji, która robi to, o czym napisałem ... –

+0

wystarczy uruchomić przykładowy kod, a zrozumiesz. – bladeX

0

Nie sądzę, że platforma Android zapewnia mechanizm do sprawdzenia, który zasób został użyty.

Ale zawsze możesz sformułować reguły na podstawie reguł określonych w dokumentacji kwalifikatorów zasobów Android.

Jednak nie jestem pewien, jakie jest dokładnie twoje wymaganie? Czy chcesz, aby aplikacja mogła rozpoznać, który zasób jest używany? A może chcesz tego tylko podczas projektowania/kompilacji.

Jeśli chodzi o ustalanie, który zasób jest używany, można łatwo sformułować logikę w oparciu o gęstość ekranu, rozmiar ekranu, bieżące ustawienia regionalne telefonu i aktualną orientację, z których wszystkie są dostępne za pośrednictwem różnych apisów obecnych w systemie Android.

+0

załóżmy, że kod nie wie nic o plikach zasobów, a ja chcę mieć funkcję, która wskaże, które kwalifikatory są używane dla danego zasobu. to jest dla środowiska wykonawczego (ponieważ w przeciwnym razie sam widzę, gdzie są pliki ...). –

+0

, która moim zdaniem nie jest możliwa ... najlepszą rzeczą, jaką możesz zrobić, to wiedzieć, które zasoby umieściłeś w każdym folderze z kwalifikatorami dostarczonymi przez Ciebie. W zależności od danych urządzeń, o których wspomniałem, możesz odgadnąć, który zasób jest pobierany przez Twoją aplikację. Nie sądzę, żebyś mógł się dowiedzieć, jakie kwalifikatory są obecne dla konkretnego zasobu, który byłby zrobiony przez system android, a nie twoją aplikację. –

0

użycie http://developer.android.com/reference/android/content/res/Configuration.html

przykładem DPI:

Configuration config = getResources().getConfiguration(); 
    Log.d("DPI ", Integer.toString(config.densityDpi)); 
+0

Gdzie jest część, którą daję ci identyfikator zasobu? Obecnie widzę tylko, że zidentyfikowałeś gęstość urządzenia.Nie ma to nic wspólnego z danym zasobem. –

+0

to, możesz zobaczyć dpi w liczbach. http://stackoverflow.com/questions/2025282/difference-between-px-dp-dip-and-sp-in-android check dpi with Configuration and known Density Bucket dla twojego telefonu. – Novikov

+0

Nie rozumiesz pytania. Nie proszę o gęstość. Pytam, jak zdobyć folder źródłowy wybranego zasobu. Na przykład, jeśli mam możliwość rysowania wewnątrz wielu folderów ("drawable-ldpi", "drawable-port", "drawable-iw", ...), chcę znaleźć który z plików wybrał, gdy próbuję uzyskać to. –