2012-01-18 17 views
16

Podążam za książką na temat Androida Development, aby zacząć pisać pierwszą prawdziwą aplikację. Doszedłem do punktu, w którym robię menu opcji dla jednej z moich aktywności. Pojawi się menu, ale odpowiednia ikona pozycji menu nie wyświetla się. Oto kod na menu:Ikona menu opcji Androida nie wyświetla się

ReminderListActivity

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     MenuInflater mi = getMenuInflater(); 
     mi.inflate(R.menu.list_menu, menu); 
     return true; 
    } 

res/menu/list_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/menu_insert" 
     android:icon="@drawable/menu_add" 
     android:title="@string/menu_insert" /> 

</menu> 

mam skopiowane ikonę ic_menu_add.png (32x32px) z jednego z podfolderów Androida SDK do folderu res/drawable-mdpi i zmienił nazwę pliku na menu_add.png. Odświeżyłem folder w czasie zaćmienia, aby ikona pojawiła się i jak widzisz ustawiam ją jako ikonę dla pozycji menu w moim pliku układu. Kilka razy próbowałem uruchomić mój projekt w emulatorze, ale ikona nigdy się nie wyświetla. Dla odmiany używam Androida 4.0.3 ..

Jakieś pomysły?

+0

można spróbować umieścić ikonę w folderze gęstości mniej? Myślę, że to nie ma nic wspólnego z twoim kodem. Być może jest to usterka w Eclipse. – iTurki

+0

Co dokładnie masz na myśli, mówiąc o folderze bez zagęszczania? Są tylko foldery ldpi, mdpi i hdpi, nie? Próbowałem umieścić ikonę we wszystkich folderach, ale to nie naprawiło. – Jort

+1

dodaj folder i nazwij go "drawable", a następnie umieść na nim ikonę. Jeśli to nie zadziałało, spróbuj skopiować ikonę w każdym folderze. Nie zapomnij odświeżyć projektu i wyczyścić go przed testem. – iTurki

Odpowiedz

28

W systemie Android 3.0+ preferowane podejście do menu opcji (menu spillover na pasku akcji) nie spowoduje wyświetlenia ikon. Jeśli masz numer android:targetSdkVersion="11" lub nowszy, ikony nigdy nie pojawią się w menu systemu Android 3.0+. Ikony pojawią się, jeśli promujesz element menu opcji jako przycisk paska narzędzi, a ikony będą wyświetlane na urządzeniach z Androidem 1.x/2.x.

+0

Dzięki za odpowiedź, podejrzewałem, że miało to coś wspólnego z ustawieniami Androida. Czy mogę po prostu zamienić elementy menu opcji w przyciski na pasku narzędziowym lub czy muszę zmienić całe moje menu opcji na pasek narzędzi? – Jort

+0

@ jort: Przede wszystkim powinieneś przestać martwić się o ikony. Możesz użyć 'android: showAsAction', aby przenieść elementy menu opcji na pasek akcji jako przyciski paska narzędzi. – CommonsWare

+0

Dzięki za wyjaśnienie. Książka, którą obserwuję, koncentruje się na pisaniu aplikacji na Androida 2.2, dlatego tak bardzo starałam się, aby moje ikony pojawiały się. Nie korzystałem jeszcze z paska działań, ale teraz rozumiem, jak interfejs zmienił się w nowszych wersjach Androida. Jeszcze raz dziękuję za przydatne rady :) – Jort

0

Dobry pomysł polega na tym, że utworzono układ z RelativeLayout, a po wybraniu przez użytkownika menu wyświetlany jest układ.

5

To doskonale działa na mnie w API 23

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context=".MainActivity"> 
<item 
    android:icon="@drawable/ic_menu" 
    android:orderInCategory="100" 
    android:title="Option Menu" 
    app:showAsAction="always"> 
    <menu> 
     <item 
      android:id="@+id/action_myorder" 
      android:icon="@drawable/ic_order" 
      android:title="My Order" /> 
     <item 
      android:id="@+id/action_myaccount" 
      android:icon="@drawable/ic_account" 
      android:title="My Account" /> 
     <item 
      android:id="@+id/action_share" 
      android:icon="@drawable/ic_share" 
      android:title="Share" /> 
     <item 
      android:id="@+id/action_term_condition" 
      android:icon="@drawable/ic_terms" 
      android:title="Term and Conditions" /> 
     <item 
      android:id="@+id/action_logout" 
      android:icon="@drawable/ic_logout" 
      android:title="Logout" /> 
    </menu> 
</item> 

+0

świetnie! wystarczy wiedzieć, jaki jest pożytek z androida: orderInCategory = "100" – Abhijit

+0

, jeśli wartość dla kategorii wynosi 0, to pojawi się menu z przepełnieniem, fragment jest większy, a 0 jest pod fragmentem. –

Powiązane problemy