我正在使用此代码:
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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)