6

我遇到了与此处描述的相同的问题-在操作栏 ShareActionProvider 上设置自定义共享图标

但是我没有使用 ActionBarSherlock
我发现 Sherlock 主题使用“ actionModeShareDrawable ”,我也可以这样使用它,如果我不使用ActionBarSherlock

<style name="Theme.MyApp" parent="android:Theme.Holo">
    <item name="*android:actionModeShareDrawable">@drawable/icon</item>
</style>

这在我的 nexus 5 上运行良好,但在许多其他设备上都失败了
所以我的问题是,如何在不使用 ActionBarSherlock 的情况下更改该图标

4

4 回答 4

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;
    }
}
于 2014-04-21T18:39:30.283 回答
2

我喜欢 PrplRugby 的回答,但您必须在您的应用程序中包含 ActivityChooserView。我重构使用反射,你可以在这里找到:https ://gist.github.com/briangriffey/11185716

于 2014-04-22T16:32:25.840 回答
0

您可以像这样在菜单中使用

菜单.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

样式.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ....
    <item name="actionModeShareDrawable">@drawable/share</item>
</style>

在最后应用这个主题

清单.xml

 <application
     ...
     android:theme="@style/AppTheme" >
于 2016-01-23T09:50:59.950 回答
-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>
于 2014-02-11T16:47:35.083 回答