我遇到与此处描述的问题相同的问题 - Setting a custom share icon on Actionbar ShareActionProvider
但我没有使用ActionBarSherlock
我发现Sherlock主题使用了“ actionModeShareDrawable ”,我也可以这样使用它,如果我不使用{{1 }}
ActionBarSherlock
这在我的nexus 5上工作正常,但在许多其他设备上失败了 所以我的问题是,如何在不使用ActionBarSherlock
的情况下更改该图标答案 0 :(得分:8)
您可以继承ShareActionProvider,仅覆盖构造函数和createActionView()。
从这里,您可以从super获取View,将其转换为ActivityChooserView,以便您可以调用 setExpandActivityOverflowButtonDrawable(Drawable)来更改图标。
package com.yourpackagename.whatever;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v7.internal.widget.ActivityChooserView;
import android.support.v7.widget.ShareActionProvider;
import android.view.View;
import com.yourpackagename.R;
public class CustomShareActionProvider extends ShareActionProvider {
private final Context mContext;
public CustomShareActionProvider(Context context) {
super(context);
mContext = context;
}
@Override
public View onCreateActionView() {
ActivityChooserView chooserView =
(ActivityChooserView) super.onCreateActionView();
// Set your drawable here
Drawable icon =
mContext.getResources().getDrawable(R.drawable.ic_action_share);
chooserView.setExpandActivityOverflowButtonDrawable(icon);
return chooserView;
}
}
答案 1 :(得分:2)
我喜欢PrplRugby的答案,但您必须在应用中包含ActivityChooserView。我重构了你可以在这里找到的反射:https://gist.github.com/briangriffey/11185716
答案 2 :(得分:0)
您可以在此菜单中使用
menu.xml文件
<item android:id="@+id/menu_share"
android:title="@string/share"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
app:showAsAction="always"
android:orderInCategory="100"/>
进入你的设置图标如果api> 21 android:actionModeShareDrawable否则actionModeShareDrawable
Style.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
....
<item name="actionModeShareDrawable">@drawable/share</item>
</style>
在最后一个应用这个主题
的manifest.xml
<application
...
android:theme="@style/AppTheme" >
答案 3 :(得分:-1)
我知道这不是主题,但我在menu.xml中设置了我的共享图标。如果您只是想要一个自定义图标,这可能会有所帮助。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/share" android:showAsAction="always" android:title="@string/share" android:icon="@drawable/ic_menu_share"/>
</menu>
我很惊讶它的功能完全正常。尝试将actionModeShareDrawalbe更改为actionModeShareDrawable。 击>
<style name="Theme.MyApp" parent="android:Theme.Holo">
<item name="android:actionModeShareDrawable">@drawable/icon</item>
</style>