【问题标题】:How to hide the share action (which use most) icon near the share action provider?如何隐藏分享操作提供者附近的分享操作(使用最多)图标?
【发布时间】:2013-04-02 03:16:19
【问题描述】:

看图。如何隐藏表示分享到 Pinterest 的图标“P”?

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

【问题讨论】:

标签: android android-actionbar actionbarsherlock shareactionprovider


【解决方案1】:

如果您希望保留所有共享历史数据模型,但只是不想要额外的“默认共享活动”icom。 How do you turn off share history when using 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"

就是这样!

【讨论】:

  • 我是否遗漏了什么,因为我现在无法实现 ActivityChooserModelClient?
  • 还有(我不早点编辑不好);如果您将 Activity 与 ActionProvider 一起离开并返回到它,您将看到一个空的 [ ] 框,其中通常会显示一个图标。
  • 我遇到了这个解决方案的问题。无法从我的自定义类中导入 com.actionbarsherlock.widget.ActivityChooserModel(阻止到外部包)。即使将此类复制到我的包中,它也不起作用(应用程序崩溃):/
  • 您也可以选择使用支持库从谷歌的源代码中获取代码。相同的修改适用。 github.com/android/platform_frameworks_support/tree/master
【解决方案2】:

我找到了解决此问题的方法。我正在使用支持库 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;
}

目前我没有发现使用此解决方法有任何问题。

【讨论】:

  • 我是 2017 年(几乎)第四季度的见证人,这确实消除了支持库版本 26.0.1 下的历史记录。
【解决方案3】:

根据 Sean 的回答,我创建了必要的类,您可以将它们复制到您的项目中 (https://gist.github.com/saulpower/10557956)。这不仅增加了关闭历史记录的功能,还可以过滤您想要共享的应用程序(如果您知道包名称)。

private final String[] INTENT_FILTER = new String[] {
        "com.twitter.android",
        "com.facebook.katana"
};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.journal_entry_menu, menu);

    // Set up ShareActionProvider's default share intent
    MenuItem shareItem = menu.findItem(R.id.action_share);

    if (shareItem instanceof SupportMenuItem) {
        mShareActionProvider = new ShareActionProvider(this);
        mShareActionProvider.setShareIntent(ShareUtils.share(mJournalEntry));
        mShareActionProvider.setIntentFilter(Arrays.asList(INTENT_FILTER));
        mShareActionProvider.setShowHistory(false);
        ((SupportMenuItem) shareItem).setSupportActionProvider(mShareActionProvider);
    }

    return super.onCreateOptionsMenu(menu);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    相关资源
    最近更新 更多