如何隐藏共享操作提供程序附近的共享操作(最常用)图标?

DzM*_*ter 10 android actionbarsherlock android-actionbar shareactionprovider

看图.我如何隐藏图标"P",这意味着分享到Pinterest?

在此输入图像描述

它们都在操作栏上,我使用ActionBarSherlock.

Sea*_*ean 12

如果您希望保留所有共享历史数据模型,但只是不希望额外的"默认共享活动"icom.答案在使用ShareActionProvider时如何关闭共享历史记录?不够好.

你应该做的是:

  • 将这些类从ActionBarSherlock复制到项目代码中
    • ShareActionProvider.java
    • ActivityChooserView.java
  • 在您的ShareActionProvider.java类中,导入刚刚复制的ActivityChooserView.java而不是ActionBarShelock文件位置
  • 在ActivityChooserView.java -
    • 找到这条线 if (activityCount > 0 && historySize > 0)
    • 替换此行if (false) (它非常难看,但它是最快的修复.您可以深入研究代码以删除所有出现的DefaultActivity实现)

编辑: 不要忘记将新设置为ActionProvider菜单项,从XML看起来像:android:actionProviderClass="com.*.CustomShareActionProvider"

而已!


Hex*_*ise 12

我找到了解决这个问题的方法.我使用的是支持库23.0.1,我没有在其他支持库版本上测试过.

解决方案很简单,当您创建ShareActionProvider时,只需覆盖onCreateActionView()方法并为其返回null.然后,您可以在弹出菜单中跟踪所有历史记录,但历史记录不会显示在工具栏中.

这是一个代码示例:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuItem item = menu.add(Menu.NONE, R.id.menu_share, Menu.NONE, R.string.share);
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    mShareActionProvider = new ShareActionProvider(this) {
        @Override
        public View onCreateActionView() {
            return null;
        }
    };
    item.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha);
    MenuItemCompat.setActionProvider(item, mShareActionProvider);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

目前我还没有发现使用这项工作有任何问题.