代码之家  ›  专栏  ›  技术社区  ›  Lucas Jota

删除操作栏上的额外图标(当使用ShareActionProvider和ActionBarSherlock时)

  •  5
  • Lucas Jota  · 技术社区  · 11 年前

    我在我的项目中使用ActionBarSherlock,并想设置一个共享按钮来在FB等发布内容。我是这样实现的: Adding items to action bar (using ActionBarSherlock)

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

    第一次尝试是,在我的目标类中,实现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(被阻止到外部包)。即使将这个类复制到我的包中,它也不起作用(应用程序崩溃)。。。

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

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

    2 回复  |  直到 8 年前
        1
  •  3
  •   Community CDub    8 年前

    我不知道你是否解决了你的问题,但我也有同样的问题要删除 ShareActionProvider 。我试过了所有的方法,我找到的答案和你差不多( How to hide the share action icon? ).
    经过一些研究,我在第二条评论中发现了这个技巧:
    Action Bar Sherlock has depreciated methods

    1. 复制/粘贴 3类 ( 共享操作提供程序 , ActivityChooserView ActivityChooverModel )从ABS到您的包裹。
    2. 用您自己的包替换您的导入。
    3. 更改线路 if (activityCount > 0 && historySize > 0) 通过 if (false) 在你的新 活动选择器视图 .
      (您将收到一个错误:“setActived”不适用于当前版本)
    4. 保存它并关闭类。
    5. 将menu.xml中的类替换为 android:actionProviderClass="com.myapp.ShareActionProvider"
    6. 在您的 Manifest ,使 minSdkVersion 等于11。保存您的项目。清洁它。
    7. 返回您的 显示 ,替换您的 最小Sdk版本 你用过的那个旧的。保存并清理。

    它非常有效。如果这个技巧解决了你的问题,请告诉我。

        2
  •  0
  •   prasanna    11 年前

    1) FLLO的上述解决方案对我来说非常有效,而且2)您只需导入ActionbarSherlock库并使用它,就不需要像上面提到的那样编辑代码。 但我的观点是最好采用解决方案1)。。。。因为在最新版本中,他们使用了ActionBarCompat