AppCompat库似乎对我不起作用

时间:2014-01-29 23:14:47

标签: android android-actionbar android-actionbar-compat

我一直在关注这个documentation以开始使用ActionBarCompat。我认为我已经做好了一切,但事实并非如此。我正在尝试向操作栏添加一个刷新按钮,但它不是看起来像一个独立的图标,而是进入溢出菜单。

以下是它的外观:

enter image description here

RES /菜单/ activity.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >

<item 
    android:id="@+id/action_refresh"
    android:title="@string/action_refresh"
    android:icon="@drawable/ic_action_refresh"
    android:actionProviderClass="android.support.v7.widget.ShareActionProvider"
    android:showAsAction="ifRoom"/>

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>

onCreateOptionsMenu

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.schedule, menu);

    MenuItem refreshItem = menu.findItem(R.id.action_refresh);

    ShareActionProvider mActionProvider = (ShareActionProvider)
            MenuItemCompat.getActionProvider(refreshItem);

    //TODO FIX
    return super.onCreateOptionsMenu(menu);
}

startSupportActionMode(暂时为空)

startSupportActionMode(new ActionMode.Callback() {

        @Override
        public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
            // TODO Auto-generated method stub
            return false;
        }
    });

我知道我可能完全错了,但我想做的就是在我的操作栏中创建一个刷新按钮。

2 个答案:

答案 0 :(得分:2)

将菜单的xml更改为:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto" >

    <item 
        android:id="@+id/action_refresh"
        android:title="@string/action_refresh"
        android:icon="@drawable/ic_action_refresh"
        android:actionProviderClass="android.support.v7.widget.ShareActionProvider"
        app:showAsAction="ifRoom"/>

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        app:title="@string/action_settings"/>

</menu>

您使用的是android:showAsAction="ifRoom",但您必须将showAsAction属性与自定义命名空间一起使用,在您的情况下为app,因此Compat ActionBar可以使用它。

答案 1 :(得分:0)

您必须使用app:actionProviderClass="android.support.v7.widget.ShareActionProvider",因为这些属性在Android框架中不存在,它由支持库定义。与android:showAsAction相同,您必须使用app:showAsAction