设置在动作条ShareActionProvider自定义共享图标(Setting a custom

2019-06-25 00:41发布

我试图设置图标ShareActionProvider,需要一个坚实的白色的,而不是半透明白色的。

然而,在share_menu.xml设置和代码不起作用。 只是想知道是否有人已经延长了ShareActionProvider前得到了这个解决办法。 (我使用actionbarsherlock)

@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    inflater.inflate(R.menu.share_menu, menu);
    MenuItem actionItem = menu.findItem(R.id.share_action_provider);

    ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider();
     actionProvider.setShareIntent(mShareIntent);

    // re-setting the icon as it's not being picked up from the menu xml file
    actionItem.setIcon(R.drawable.ic_action_share);

    super.onCreateOptionsMenu(menu, inflater);

}

share_menu.xml

 <item android:id="@+id/share_action_provider"
        android:showAsAction="ifRoom"
        android:title="@string/share_with"
        android:icon="@drawable/ic_action_share"
        android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider" />

更新:还试图在风格上设置它,但没有喜悦

<style name="Theme.MyApp" parent="Theme.Sherlock.Light">
        <item name="actionModeStyle">@style/ActionModeStyle</item>
        <item name="android:actionModeStyle">@style/ActionModeStyle</item>
</style>

<style name="ActionModeStyle" parent="Widget.Sherlock.ActionMode">
      <item name="actionModeShareDrawable">@drawable/ic_action_share</item>
  </style>

Answer 1:

当我寻找到自定义操作栏,通常是第一个地方,我看是ActionBarSherlock的主题和风格。

我发现福尔摩斯主题使用“actionModeShareDrawable”中找到theme.xml文件。

试着改变你的主题直接包含“actionModeShareDrawable”项目。

<style name="Theme.MyApp" parent="Theme.Sherlock.Light">
    <item name="actionModeShareDrawable">@drawable/ic_action_share</item>
</style>


Answer 2:

对于AppCompat需要更改为2种样式:

1)

<style name="MyAppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="actionBarWidgetTheme">@style/Theme.AppCompat.CustomShareIcon</item>
    <item name="android:actionBarWidgetTheme">@style/Theme.AppCompat.CustomShareIcon</item>
</style>

换句话说,specifiing attr:actionModeShareDrawableMyAppTheme是不是你真正需要的,但它应该在你提到attr:actionBarWidgetTheme如下:

2)

<style name="Theme.AppCompat.CustomShareIcon" parent="@style/Theme.AppCompat">
    <item name="actionModeShareDrawable">@drawable/abc_ic_menu_share_holo_dark</item> <!-- your icon goes here -->
</style>


Answer 3:

更新:忘了下面的取巧的办法,只是子类ShareActionProvider,在返回null onCreateActionView方法,并提供menu.xml文件文件自己的图标,一切都会好起来

===========================

我发现了一个很棘手,但没有-ActionBarSherlock特定的方式:

  1. 子类ShareActionProvider,只是一个小调整:

     @Override public View onCreateActionView() { View target = super.onCreateActionView(); ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.actionbutton_share, null); ImageView overlay = (ImageView) viewGroup.findViewById(R.id.overlay); ViewGroup container = (ViewGroup) viewGroup.findViewById(R.id.container); container.addView(target); container.getLayoutParams().width = overlay.getLayoutParams().width; container.getLayoutParams().height = overlay.getLayoutParams().height; return viewGroup; } 
  2. 创建布局文件(R.layout.actionbutton_share),其放置在顶部,以用户的原始视图,但透明的(请注意“机器人:阿尔法= 0”的部分):

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:alpha="0" /> <ImageView android:id="@+id/overlay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_marginLeft="7dp" android:layout_marginRight="7dp" android:src="@drawable/yours_whatever_share_icon" tools:ignore="ContentDescription" /> </RelativeLayout> 
  3. 使用砍死ShareActionProvider在menu.xml文件的文件



Answer 4:

vivimice的解决方案是好的,但最近使用的应用程序的共享图标被隐藏起来了。

我做了自定义的共享图标为一个共同的菜单项目没有任何ShareActionProvider,只是在onOptionsItemSelected()方法中使用此代码:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));

它创建不是一个弹出菜单,而是一个选择对话框。



Answer 5:

您可以覆盖这样的非公共属性。

<style name="Theme.MyApp" parent="android:Theme.Holo">
        <item name="*android:actionModeShareDrawalbe">@drawable/icon</item>
</style>

(*)表示参照的Android非公共资源



文章来源: Setting a custom share icon on Actionbar ShareActionProvider