Android自定义图标ShareActionProvider?

Android自定义图标ShareActionProvider?,第1张

概述我正在使用ShareActionProvider,但我想自定义图标(我想改变颜色,因为目前它是白色的). 我正在使用此代码: mShareActionProvider = (ShareActionProvider) item.getActionProvider(); Intent myIntent = new Intent(Intent.ACTION_SEND); myIntent 我正在使用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,则使用this resource is defined for Lollipor or newer,但不适用于以前的版本.

下面是本机ShareActionProvIDer的答案(这是本问题的原始范围).

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

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框架中不公开(尽管如果使用兼容性库,例如AppCompat或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的内部实现在将来发生变化,这可能会很脆弱.

总结

以上是内存溢出为你收集整理的Android自定义图标ShareActionProvider?全部内容,希望文章能够帮你解决Android自定义图标ShareActionProvider?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1138924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存