【问题标题】:Remove extra icon at actionbar (when using ShareActionProvider and ActionBarSherlock)删除操作栏上的额外图标(使用 ShareActionProvider 和 ActionBarSherlock 时)
【发布时间】:2013-09-26 20:18:21
【问题描述】:

我在我的项目中使用 ActionBarSherlock,并想设置一个分享按钮以在 FB 等上发布内容......我通过这种方式实现了这一点:Adding items to action bar (using ActionBarSherlock)

您可能知道,ShareActionProvider 添加了第二个图标,其中包含最常用的共享选项。这意味着另一个应用程序的图标出现在我的操作栏中,我想阻止这种行为......我已经看到了 2 种可能的解决方案,但不幸的是,这两种方法都对我不起作用:/

第一次尝试是在我的目标类中实现 OnShareTargetSelectedListener 并覆盖 onShareTargetSelected 方法(如这里:ActionBarSherlock - Share Content icon issue)。但是额外的图标仍然存在......这是我的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getSupportMenuInflater().inflate(R.menu.share, menu);
    mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider();
    Intent intent = getDefaultShareIntent();
    mShareActionProvider.setOnShareTargetSelectedListener(this);
    if(intent!=null)
        mShareActionProvider.setShareIntent(intent);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onShareTargetSelected(ShareActionProvider source,
                                     Intent intent) {
    this.startActivity(intent);
    // started activity ourself to prevent search history
    return true;
}

第二次尝试是从 ActionBarSherlock 重写一些类,以防止它显示额外的图标(如这里:How to hide the share action (which use most) icon near the share action provider?)。但是我遇到了这个解决方案的问题,因为我无法从我的自定义类中导入 com.actionbarsherlock.widget.ActivityChooserModel (阻止到外部包)。即使将此类复制到我的包中,它也不起作用(应用程序崩溃)...

看起来禁用这个额外的图标是一件很平常的事情,但我不明白为什么上面的解决方案对我不起作用......

提前感谢您的任何想法和建议

【问题讨论】:

  • 您的第二个解决方案是我推荐的方法。 “即使将这个类复制到我的包中,它也不起作用(应用程序崩溃)”——使用 LogCat 检查与您的崩溃相关的 Java 堆栈跟踪。 “看起来禁用这个额外的图标是一件很平常的事情”——你的证明是......究竟是什么?

标签: android android-actionbar actionbarsherlock


【解决方案1】:

我不知道您是否解决了您的问题,但我在删除 ShareActionProvider 的历史记录时遇到了同样的问题。我尝试了所有方法,我找到的接近答案与您相同(How to hide the share action icon?)。
经过一番研究,我在第二条评论中发现了这个技巧:
Action Bar Sherlock has depreciated methods

  1. 3 个类ShareActionProviderActivityChooserViewActivityChooverModel)从 ABS 复制/粘贴到您的包中。
  2. 用你自己的包替换你的导入。
  3. 在您的新ActivityChooserView 中将if (activityCount > 0 && historySize > 0) 行更改为if (false)
    (您将收到错误消息:“setActived”不适用于您当前的版本) 李>
  4. 保存并关闭课程。
  5. 将 menu.xml 中的类替换为 android:actionProviderClass="com.myapp.ShareActionProvider"
  6. 在您的Manifest 中,使minSdkVersion 等于11。保存您的项目。打扫。
  7. 返回到您的Manifest,将您的minSdkVersion 替换为您使用的旧的。保存并清洁。

完美运行。如果此提示解决了您的问题,请告诉我。

【讨论】:

  • 在执行相同操作时,我在 ShareActionProvider 扩展 ActionProvider 时遇到错误??如何解决它
  • 你得到的确切错误是什么,@KingofMasses?也许您需要为此发布相关问题,并详细说明您的问题。
  • 实际上我无法导入 com.android.internal.R;.. 有什么帮助吗? @Fllo 我的目标是不发布我想追查的问题!
【解决方案2】:

1) FLLO 的上述解决方案完全适合我,而且 2) 你可以只导入 ActionbarSherlock 库并使用它,这样就不需要像上面提到的那样编辑代码。 但我的观点是更好地使用解决方案 1).... 因为在最新版本中他们使用了 ActionBarCompat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多