我使用的是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"/>如何更改图标(或颜色)?
thx,
发布于 2014-06-29 00:06:03
编辑/简短回答:如果使用AppCompat的ShareActionProvider,只需在主题定义中提供一个新的actionModeShareDrawable即可。
<style name="MyTheme" parent="Theme.AppCompat">
<item name="actionModeShareDrawable">@drawable/my_share_drawable</item>
</style>如果不使用AppCompat,则使用此资源是为Lollipor或较新的,但不用于以前的版本。
下面是本机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()方法。然后,您可以使用任何您想要的可拖。
然而,由于的实现使用其他不公开的类,使得的编辑更加复杂。为了避免重复大量代码,您只需通过反射更改图标,如下所示:
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的内部实现发生变化,这可能会变得很脆弱。
发布于 2015-02-23 16:00:58
要更改ShareActionProvider的图标,需要扩展AppCompat主题并将自定义图标设置为"actionModeShareDrawable":
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="actionModeShareDrawable">@drawable/ic_share</item>
</style>发布于 2014-05-24 16:47:40
您可以通过定义自定义样式来更改背景色,如:
<resources>
<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">ANY_HEX_COLOR_CODE</item>
</style>
</resources>现在您需要将"MyTheme"设置为application / activity.的主题。
https://stackoverflow.com/questions/23846127
复制相似问题