使用 ShareActionProvider-v7 的 ActionBar 上的 ShareAction 图标大小问题

Size of ShareAction icon issue on ActionBar with ShareActionProvider-v7

我在我的 ActionBar 上解决我的旧 ShareAction,自从我在 SDK Manager 上更新我的包后它就开始工作了。我从 Google 中看到 this 文档说,

To add a "share" action to your activity, put a ShareActionProvider in the app bar's menu resource. For example:

我添加了相同的内容但没有添加任何内容 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跟下面code.you可以看到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 文档说,

You do not need to specify an icon, since the ShareActionProvider widget takes care of its own appearance and behavior. However, you do need to specify a title with android:title, in case the action ends up in the overflow menu.

这是我到目前为止所做的:

 @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 中看到的是,

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

如您所见,ShareAction 的大小太大了。 (我猜这违反了 MaterialDesign 准则)。


我忘了说,我已经尝试过 android:icon="@mipmap/ic_share",它与我之前的 method/trick 一起使用。但是,请查看来自 AndroidStudio 的预览:

这里是编译后的:

没有改变!

所以,我的问题是:这是错误还是我做错了什么?

Intent.createChooser 也不起作用:来自:

编辑:

最有趣的部分,我刚刚在接下来的课程和他们称之为应用程序的 Google 中看到了相同的设计和相同的结果阳光应用:

Applink

课程:

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

实用地更改图标

@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;
}

或主题

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

material 设计中的图标是 24dp x 24dp,正如 SearchView 所反映的那样。但是,ShareActionProvider 尚未默认更新为 material 设计。

您可以在您的主题中设置actionModeShareDrawable来设置ShareActionProvider中的分享图标:

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

请注意 ShareActionProvider 在 material 设计指南中的任何地方都找不到 Android M 的直接共享功能(此时需要您使用标准共享意图),目前尚不清楚 ShareActionProvider 是否不再是建议的模式。

有关更多详细信息,请访问此处。

如果您不需要共享菜单项的自定义图标,请尝试 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

好的,正如 的 ianhanniballake 所说,

Icons in material design are 24dp x 24dp, as properly reflected by the SearchView. However, ShareActionProvider has not yet been updated to material design by default.

顺便说一下,我刚刚 post 编辑了一个 question/report 到 code.google.com,你可以在这里看到它:

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

默认图标好像是 24dp x 24dp 但应该是这样的:

但是现在,是这样的:

似乎是一个错误,仍在等待接受或回答有关 it.I 如果他们回答,我们会更新此 post。7 天过去了!

更新:

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

非常感谢 ssingamc...@google.comGoogle 的支持。

这里有答案:http://code.google.com/p/android/issues/detail?id=200335#c10

如果有任何更新或修复可用,我将更新此答案。

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

Hi, The development team has fixed the issue that you have reported and it will be available in a future build. Thanks