2014-01-16 2 views
0

Я использую ActionBar Compat в моем приложении, и мне нужно показать раскрывающееся меню, когда пользователь нажимает кнопку на панели действий. В версиях 4.x это нормально, но в версии 2.3 у меня есть что-то вроде диалога.ActionBar Совместимость не отображает выпадающее меню

2,3 скриншот

version 2.3

Как я уже сказал, в 4.x это нормально:

version 4.0.1

Вот код:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.categories, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

categories.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:onekr="http://schemas.android.com/apk/res-auto" > 

    <item 
     android:id="@+id/refresh" 
     android:icon="@drawable/ic_action_refresh" 
     onekr:showAsAction="always" 
     android:title="@string/refresh" 
     android:visible="true"> 
    </item> 
    <item 
     android:id="@+id/dissmiss_page_loading" 
     android:icon="@drawable/ic_action_cancel" 
     onekr:showAsAction="always" 
     android:title="@string/cancel" 
     android:visible="false"> 
    </item> 

    <item 
     android:id="@+id/categories" 
     android:icon="@drawable/ic_action_overflow" 
     onekr:showAsAction="always" 
     android:title="@string/categories" 
     android:visible="true"> 
     <menu xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:onekr="http://schemas.android.com/apk/res-auto" > 
      <item 
       android:id="@+id/city" 
       onekr:showAsAction="always" 
       android:title="@string/city" 
       android:visible="true"> 
      </item> 
      <item 
       android:id="@+id/culture" 
       onekr:showAsAction="always" 
       android:title="@string/culture" 
       android:visible="true"> 
      </item> 
     </menu> 
    </item> 

</menu> 

Почему это может быть? Как это можно исправить? Большое спасибо всем, кто отвечает!

ответ

3

Чтобы избежать этого, нам нужно использовать PopupMenu!

Например:

action_bar_buttons.xml

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:mynamespace="http://schemas.android.com/apk/res-auto" > 

     <item 
      android:id="@+id/some_other_btn" 
      android:icon="@drawable/some_other_btn" 
      mynamespace:showAsAction="always" 
      android:title="@string/some_other_btn" 
      android:visible="true"> 
     </item> 

     <item 
      android:id="@+id/open_drop_down" 
      android:icon="@drawable/open_drop_down" 
      mynamespace:showAsAction="always" 
      android:title="@string/open_drop_down" 
      android:visible="true"/> 

    </menu> 

drop_down_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:mynamespace="http://schemas.android.com/apk/res-auto" > 

    <item 
     android:id="@+id/item_1" 
     android:title="@string/item_1" 
     android:visible="true" 
     mynamespace:showAsAction="always"> 
    </item> 
    <item 
     android:id="@+id/item_2" 
     android:title="@string/item_1" 
     android:visible="true" 
     mynamespace:showAsAction="always"> 
    </item> 

</menu> 

в MainActivity.java

public void showPopup(int itemId){ 
     View view = findViewById(itemId); 
     PopupMenu popupMenu = new PopupMenu(getSupportActionBar().getThemedContext(), view); 
     popupMenu.setOnMenuItemClickListener(/* drop_down item click listener */); 
     popupMenu.getMenuInflater().inflate(R.menu.drop_down_menu, popupMenu.getMenu()); 
     popupMenu.show(); 
    } 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

    /* . . . */ 

    case R.id.open_drop_down: 
     showPopup(R.id.open_drop_down); 
     break; 

    /* . . . */ 

    default: 
     break; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

Это не работает с иконками! Подменю отображается правильно как выпадающее меню, но значки не отображаются. – DominicM

+0

Я использую это для своего приложения, но как установить значок для подменю? –

-3

Вы можете использовать Шерлок Action Bar, если ваши целевые устройства Android SDK < 11.

Посмотри http://actionbarsherlock.com/

Github образец здесь: https://github.com/JakeWharton/ActionBarSherlock-Gradle-Sample Существует пример здесь: http://www.androidbegin.com/tutorial/implementing-actionbarsherlock-in-android/ Еще один пример: http://www.grokkingandroid.com/adding-actionbarsherlock-to-your-project/

Если вы не хотите использовать ActionBarSherlock, вам необходимо использовать поддержку поддержки Android, но я бы рекомендовал использовать ActionBarSherlock

+0

Спасибо за ответ, но это не вариант для меня, потому что значок ящика не отображается правильно в ActionBarSherlock = [ –

Смежные вопросы