带有ShareActionProvider-v7的ActionBar上ShareAction图标问题的大小

时间:2016-01-25 14:43:21

标签: android android-studio android-actionbar shareactionprovider

我在我ShareAction上的旧版ActionBar上工作,因为我在SDK Manager更新了我的套餐,所以它正在运行。我看到来自 Google this文档,其中说

  

要为您的活动添加“分享”操作,请输入ShareActionProvider   应用栏的菜单资源。例如:

我添加了相同内容而未添加任何Icons

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

我正在使用:

app:actionProviderClass="Mypackagename.ShareActionProvider"

使用以下代码的自定义ShareActionProvider。您可以看到它here

我看到了一个黑客或技巧(使用ShareActionProvider - v4)并且一切都很好,因为我决定使用android.support.v7.widget.ShareActionProvider

所以,这是我目前的代码:

<item
   android:id="@+id/shareac"
   android:title="@string/share"
   app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
   app:showAsAction="always" />

我没有使用Icon,因为文档说的是here

  

您不需要指定图标 ,因为ShareActionProvider   小部件负责自己的外观和行为。但是,你这样做   需要使用android:title指定标题,以防操作结束   在溢出菜单中。

以下是我迄今为止所做的事情:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main_details, menu);
        // Locate MenuItem with ShareActionProvider
        MenuItem item = menu.findItem(R.id.shareac);
        // Fetch and store ShareActionProvider
        mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        Bundle extra = getIntent().getExtras();
        String title = extra.getString("title");
        Bundle extraurl = getIntent().getExtras();
        String url = extraurl.getString("url");
        shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this new project from something : " + title + url);
        shareIntent.setType("text/plain");
        mShareActionProvider.setShareIntent(shareIntent);
        return true;
    }

所以,这就是我现在在Android Studio 1.5.1中看到的,是,

enter image description here

如果运行并编译应用程序:

enter image description here

如您所见,ShareAction的大小过多。 (我猜这违反了MaterialDesign指南。)

我忘了说,我已经尝试android:icon="@mipmap/ic_share",这与我以前的方法/技巧一起使用。但是,请从AndroidStudio

中查看此预览

enter image description here

这是在编译之后:

enter image description here

没有改变!

所以,我的问题是:这是一个错误,或者我在这里做错了什么?

Intent.createChooser也不起作用:来自:https://stackoverflow.com/a/34797718/4409113

修改:

最有趣的部分,我刚刚在以下课程中看到了来自 Google 的相同设计和相同的结果,以及他们称之为 SunShine 的应用程序em> app:

Applink

课程:

https://www.udacity.com//course/viewer#!/c-ud855/l-3961788738/m-4294896397

4 个答案:

答案 0 :(得分:4)

好的,正如this post的ianhanniballake所说,

  

材料设计中的图标为 24dp x 24dp ,正如   SearchView。但是, ShareActionProvider尚未更新为   默认情况下的材料设计。

顺便说一句,我刚刚向code.google.com发布了一个问题/报告,您可以在此处查看:

<强> http://code.google.com/p/android/issues/detail?id=200335

默认图标似乎是 24dp x 24dp ,但它应该是这样的:

enter image description here

但现在,就像这样:

enter image description here

似乎是一个错误,仍然在等待接受或回答它。如果他们回答了7天,我将更新这篇文章!

<强>更新

最后,他们已将缺陷分配给开发团队,他们会在可用时提供更多信息来更新此问题。

非常感谢 Google ssingamc...@google.com寻求支持。

答案可在此处找到:http://code.google.com/p/android/issues/detail?id=200335#c10

如果有任何更新或任何修正,我会更新此答案。

更新 http://code.google.com/p/android/issues/detail?id=200335#c12

  

嗨,开发团队已经修复了您报告的问题   它将在未来的版本中提供。感谢

答案 1 :(得分:3)

材料设计中的图标为24dp x 24dp,由SearchView正确反映。但是,默认情况下,ShareActionProvider尚未更新为材料设计。

您可以在主题中设置actionModeShareDrawable以在ShareActionProvider中设置共享图标:

<item name="actionModeShareDrawable">@drawable/share_icon</item>

请注意,在材料设计指南中没有找到ShareActionProvider,并且在Android M的直接共享功能(此时要求您使用标准共享意图)中找不到ShareActionProvider,目前尚不清楚<Style TargetType="TabControl" x:Key="TabControlStyle"> <Style.Resources> <Style TargetType="TabItem"> </Style> 不再是建议模式。

详情请访问此处。

AppCompat ShareActionProvider icon is too big compared to other icons

答案 2 :(得分:1)

更改图标实用

stroke

或主题

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main_details, menu);
    // Locate MenuItem with ShareActionProvider
    MenuItem item = menu.findItem(R.id.shareac);
    // Fetch and store ShareActionProvider
    mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    Bundle extra = getIntent().getExtras();
    String title = extra.getString("title");
    Bundle extraurl = getIntent().getExtras();
    String url = extraurl.getString("url");
    shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this new project from something : " + title + url);
    shareIntent.setType("text/plain");
    mShareActionProvider.setShareIntent(shareIntent);
    //Here
    item.setIcon(getResources().getDrawable(R.drawable.ic_share));
    return true;
}

答案 3 :(得分:0)

如果您不需要共享菜单项的自定义图标,请尝试使用android资源进行共享菜单项,如下所示:

 <item android:id="@+id/action_share"
   android:title="@string/share"
   app:showAsAction="ifRoom"
   android:icon="@android:drawable/ic_share"
   app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>

请参阅here