【问题标题】:ActionBar Compat do not show dropdown menuActionBar Compat 不显示下拉菜单
【发布时间】:2014-01-16 22:24:42
【问题描述】:

我在我的应用程序中使用 ActionBar Compat,当用户单击操作栏中的按钮时,我需要显示下拉菜单。在 4.x 版本中没问题,但在 2.3 中我有类似对话框的东西。

2.3 截图

就像我说的,在 4.x 中没问题:

这里有一些代码:

@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>

为什么会这样?如何解决这个问题?非常感谢所有回复的人!

【问题讨论】:

    标签: android xml drop-down-menu android-actionbar-compat


    【解决方案1】:

    为了避免这种情况,我们需要使用 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);
    }
    

    【讨论】:

    • 这不适用于图标!子菜单正确显示为下拉菜单,但未显示图标。
    • 我在我的应用程序中使用它,但是如何设置子菜单的图标?
    【解决方案2】:

    如果您的目标设备是 android SDK

    看看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

    【讨论】:

    • 感谢您的回答,但这不是我的选择,因为抽屉图标在 ActionBarSherlock =[ 中显示不正确
    猜你喜欢
    • 2012-05-27
    • 2022-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2020-10-01
    相关资源
    最近更新 更多