Android 如何修复support actionbar中的共享图标

Android 如何修复support actionbar中的共享图标,android,xamarin,shareactionprovider,Android,Xamarin,Shareactionprovider,我正在尝试在我的应用程序中实现共享功能。到目前为止,它运行良好,我可以将文本共享到所有其他应用程序。问题在于它的表现方式 我想要的东西就像共享图标一样可见,当用户点击它时,它会打开操作系统对话框,让用户选择他们想要共享内容的应用程序 var share_article = menu.FindItem (Resource.Id.action_share); var share_article_provider = (Android.Support.V7.Widget.ShareAc

我正在尝试在我的应用程序中实现共享功能。到目前为止,它运行良好,我可以将文本共享到所有其他应用程序。问题在于它的表现方式

我想要的东西就像共享图标一样可见,当用户点击它时,它会打开操作系统对话框,让用户选择他们想要共享内容的应用程序

    var share_article = menu.FindItem (Resource.Id.action_share);
    var share_article_provider = (Android.Support.V7.Widget.ShareActionProvider) Android.Support.V4.View.MenuItemCompat.GetActionProvider (share_article);
    share_article_provider.SetShareIntent (CreateIntent ());
以及xml:

<item 
    android:id="@+id/action_share"
    myapp:showAsAction="ifRoom"
    android:title="share"
    myapp:actionProviderClass="android.support.v7.widget.ShareActionProvider" />

我的应用程序当前看起来如下所示:

它周围还有一个白色的边框,我不喜欢。 有没有办法改变图标


如何修复它???

您只想关闭您的共享历史记录。没有官方API可用于此操作,但您可以创建自己的
ShareActionProvider
。实际上有两个类似的问题:

  • 希望这些可以帮助您。

    如使用支持库时所述,这可以很容易地修复。此方法不会关闭共享历史记录,但会对actionbar隐藏图标。 我只需要将
    Android.Support.V7.Widget.ShareActionProvider子类化如下:(C#使用Xamarin)

    然后在创建选项菜单中使用MyShareActionProvider,如下所示:

    var share_article = menu.FindItem (Resource.Id.action_share);
    var share = new SingleArticleShareActionProvider (globalContext);
    
    Android.Support.V4.View.MenuItemCompat.SetActionProvider (share_article, share);
    share_article.SetIcon (Resource.Drawable.abc_ic_menu_share_mtrl_alpha);
    share.SetShareIntent (CreateIntent ());
    

    你可以在方法
    SetIcon

    中使用任何你喜欢的图标。你的意思是你不想要smm图标?只要共享图标就足够了?@penkzhou,是的,这正是我的意思。当用户单击共享时,将打开共享对话框。
    var share_article = menu.FindItem (Resource.Id.action_share);
    var share = new SingleArticleShareActionProvider (globalContext);
    
    Android.Support.V4.View.MenuItemCompat.SetActionProvider (share_article, share);
    share_article.SetIcon (Resource.Drawable.abc_ic_menu_share_mtrl_alpha);
    share.SetShareIntent (CreateIntent ());