2012-03-06 16 views
12

Mam ikony dla mojego menu Android. W systemie Android 3+ używam czarnego paska akcji, więc ikony są białe. Jednak w Androidzie 2.x menu jest z natury białe, co oznacza, że ​​ikony są prawie niewidoczne. Jak mogę korzystać z różnych ikon menu dla różnych wersji? Zakładam, że mogę to zrobić za pomocą różnych katalogów do rysowania, takich jak res/drawable-mdpi-v11, ale zastanawiam się, czy istnieje inny sposób, więc nie muszę tworzyć grupy różnych katalogów, ponieważ dodam wersje lub piksele gęstości.Użyj różnych ikon z różnymi wersjami Androida SDK

EDYCJA: Dodałem ciemne wersje w rozdzielczości/drawable-mdpi i res/drawable-hdpi do użytku z Androidem 2.x i umieszczam lekkie wersje w res/drawable-mdpi-v11 i res/drawable-hdpi-v11 do użytku z systemem Android w wersji 3.x lub nowszej, ale mój emulator Androida 2.1 (sdk 7) nadal wyświetla wersję light.

Każdy pomysł, dlaczego?

Odpowiedz

19

Możesz wybrać kompozycję na podstawie wersji platformy, zgodnie z opisem w przewodniku dla deweloperów Styles and Themes. Zdefiniować styl w RES/Wartości/styles.xml tak:

<style name="ThemeSelector" parent="android:Theme.Light"> 
    ... 
</style> 

potem w res/wartości-v11/folderu, wybierz motyw (prawdopodobnie Holo, jeśli jesteś ciemny)

<style name="ThemeSelector" parent="android:Theme.Holo"> 
    ... 
</style> 

Następnie dodaj ikony do tego stylu. Na przykład tutaj jest fragment z pliku styles.xml z przykładowej aplikacji HoneycombGallery.

<style name="AppTheme.Dark" parent="@android:style/Theme.Holo"> 
    ... 
    <item name="menuIconCamera">@drawable/ic_menu_camera_holo_dark</item> 
    <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_dark</item> 
    <item name="menuIconShare">@drawable/ic_menu_share_holo_dark</item> 
</style> 

Dolne 3 elementy to wszystkie ikony w katalogach do rysowania. Nadal będziesz potrzebować co najmniej jednego folderu dla każdego zestawu ikon, ale możesz łączyć ciemne ikony jasnych & w tym samym folderze, ale nie musisz mieć różnych folderów ikon dla każdej wersji platformy. Ponadto, trzeba je wymienić jako odniesienia w pliku wartości/attrs.xml, tak:

<resources> 
    <declare-styleable name="AppTheme"> 
    <attr name="listDragShadowBackground" format="reference" /> 
    <attr name="menuIconCamera" format="reference" /> 
    <attr name="menuIconToggle" format="reference" /> 
    <attr name="menuIconShare" format="reference" /> 
    </declare-styleable> 
</resources> 

w którym momencie będzie można odnieść się do nich w swoim układzie XML przy użyciu „? attr/NameOfYourDrawable "dereferencja", tak:

<item android:id="@+id/menu_camera" 
     android:title="@string/camera" 
     android:icon="?attr/menuIconCamera" 
     android:showAsAction="ifRoom" /> 
6

Znalezione na miejscu android dev: http://developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html

Uwaga: Ponieważ środki te mogą zmieniać się pomiędzy wersjami platformy, nie powinno się odwoływać tych ikon przy użyciu identyfikatorów zasobów platformy Android (tj ikony menu pod android.R.drawable) . Aby używać dowolnych ikon lub innych wewnętrznych zasobów do rysowania, należy przechowywać lokalną kopię tych ikon lub rysunków w zasobach aplikacji, a następnie odwołać się do lokalnej kopii z kodu aplikacji. W ten sposób możesz zachować kontrolę nad wyglądem twoich ikon, nawet jeśli zmienia się kopia systemu. Zauważ, że poniższa siatka nie jest kompletna.

/RES/odkształcalne-hdpi (Android 2.2 i poniżej)

/RES/odkształcalne-hdpi-v # (dla Androida 2.3 i wyżej)

Czy też próbowali testowania to na 2.1 + telefon, a nie emulator? Jeśli nie masz telefonu, spróbuj utworzyć kolejny AVD? Obawiam się, że będziesz potrzebować oddzielnych folderów.

Mam nadzieję, że to pomoże.

+0

To było dokładnie to, czego potrzebowałem. Walczyłem z jasnymi i ciemnymi zestawami ikon w mojej aplikacji. Od 2.3 i poniżej używać białego menu i 3.0 i wyżej używać ciemnego menu dla standardowych tematów, nie mogłem po prostu użyć jednego zestawu ikon. Dzięki! – kenyu73

+1

To powinna być odpowiedź. Działa dobrze –

Powiązane problemy