Android自定义图标ShareActionProvider?

开发迷失

我正在使用ShareActionProvider,但我想自定义图标(我想更改颜色,因为当前它是白色的)。

我正在使用此代码:

        mShareActionProvider = (ShareActionProvider) item.getActionProvider();
    Intent myIntent = new Intent(Intent.ACTION_SEND);
    myIntent.setType("text/plain");
    myIntent.putExtra(Intent.EXTRA_TEXT, str_share);
    mShareActionProvider.setShareIntent(myIntent);

XML:

<item
  android:id="@+id/menu_item_share"
  android:showAsAction="ifRoom"
  android:title="@string/titlePartager"
  android:actionProviderClass="android.widget.ShareActionProvider"
  android:icon="@drawable/ic_share"/>

如何更改图标(或颜色)?

谢谢,

马蒂阿什人

编辑/简短答案:如果使用AppCompat的ShareActionProvider,只需actionModeShareDrawable在主题定义中提供一个新的即可

<style name="MyTheme" parent="Theme.AppCompat">
    <item name="actionModeShareDrawable">@drawable/my_share_drawable</item>
</style>

如果使用AppCompat,则此资源是为Lollipor或更高版本定义的,但不是为先前版本定义的。


以下是本机的答案ShareActionProvider(这是此问题的原始范围)。

要更改此图像,您应该更改actionModeShareDrawable应用程序主题的值看一下ShareActionProvideronCreateActionView()方法:

public View onCreateActionView() {
    // Create the view and set its data model.
    ...

    // Lookup and set the expand action icon.
    TypedValue outTypedValue = new TypedValue();
    mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true);
    Drawable drawable = mContext.getResources().getDrawable(outTypedValue.resourceId);
    ...  

不幸的是这个属性是不是在Android框架公众(虽然它如果使用兼容库,如程序兼容性或ActionBarSherlock)。在这种情况下,仅是覆盖该主题的值即可。

如果您都不使用这两个库,则唯一的解决方案(我知道)是创建方法的子类ShareActionProvider并重新实现该onCreateActionView()方法。然后,您可以使用所需的任何可绘制对象来代替。

编辑然而,由于onCreateActionView()使用其他非公共类的实现,这使情况更加复杂为了避免重复很多代码,您可以通过反射更改图标,如下所示:

public class MyShareActionProvider extends ShareActionProvider
{
    private final Context mContext;

    public MyShareActionProvider(Context context)
    {
        super(context);
        mContext = context;
    }

    @Override
    public View onCreateActionView()
    {
        View view = super.onCreateActionView();
        if (view != null)
        {
            try
            {
                Drawable icon = ... // the drawable you want (you can use mContext to get it from resources)
                Method method = view.getClass().getMethod("setExpandActivityOverflowButtonDrawable", Drawable.class);
                method.invoke(view, icon);
            }
            catch (Exception e)
            {
                Log.e("MyShareActionProvider", "onCreateActionView", e);
            }
        }

        return view;
    }
}

与涉及反射的任何解决方案一样,如果ShareActionProvider将来内部实施更改,这可能会很脆弱

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android自定义图标ShareActionProvider?

来自分类Dev

如何在Android中自定义ShareActionProvider

来自分类Dev

在没有ActionBarSherlock的情况下在Actionbar ShareActionProvider上设置自定义共享图标

来自分类Dev

Android Google Map Cluster图标忽略自定义图标

来自分类Dev

QFileSystemModel自定义图标?

来自分类Dev

UIBarButtonItem自定义图标

来自分类Dev

Wirecloud图标自定义

来自分类Dev

UIBarButtonItem自定义图标

来自分类Dev

Android工具栏中的自定义图标

来自分类Dev

自定义Android Pull-To-Refresh图标

来自分类Dev

如何在Android Studio中导入自定义图标?

来自分类Dev

自定义应用栏添加文本和图标-Android

来自分类Dev

使用Mixpanel自定义Android通知图标

来自分类Dev

Android自定义对话框图标

来自分类Dev

Android:隐藏自定义操作栏图标

来自分类Dev

Android设备上的自定义操作图标

来自分类Dev

无法自定义标签中的android图标和文本

来自分类Dev

使用Mixpanel自定义Android通知图标

来自分类Dev

Android-动态自定义地图标记

来自分类Dev

Android自定义对话框图标

来自分类Dev

Android:隐藏自定义操作栏图标

来自分类Dev

带有 ios 和 android 的自定义图标

来自分类Dev

SonataAdminBundle自定义组图标

来自分类Dev

自定义标签栏图标颜色

来自分类Dev

自定义js树上的图标

来自分类Dev

位置的自定义图标。可能吗?

来自分类Dev

自定义UITabBar图标iOS

来自分类Dev

Windows自定义图标大小(NSIS)

来自分类Dev

如何自定义特殊图标