1

我正在使用带有最新 sdk 和 api (4.4.2) 的操作栏。我正在使用自己的主题;自定义黑白。我不知道如何更改默认的“返回”和“共享”图标。它们是灰色的,我希望它是纯黑色的。我怎样才能做到这一点?发布的其他问题和答案无济于事。

我尝试使用和设置一个可绘制的共享图标,但它没有改变......我也不知道如何更改后退按钮。

在此处输入图像描述

<item
    android:id="@+id/share_option"
    android:actionProviderClass="android.widget.ShareActionProvider"
    android:showAsAction="ifRoom"
    <!-- android:icon="@drawable/action_share" | This doesn't do the trick -->
    android:title="@string/Share"/>
4

1 回答 1

4

“向上”指示符可以使用属性来设置主题android:homeAsUpIndicator

ShareActionProvider图标可以使用属性进行主题化*android:actionModeShareDrawable。包含*前缀很重要,因为此属性不是公开的。

但是,如果您使用Theme.Holo.Light.DarkActionBar,则必须子类ShareActionProvider化并使用反射来更改图标。

以下是这两种情况的示例:

使用主题

<style name="Your.Theme" parent="@android:style/Theme.Holo.Light">
    <item name="android:homeAsUpIndicator">@drawable/your_up_indicator</item>
    <item name="*android:actionModeShareDrawable">@drawable/your_share_icon</item>
</style>

使用反射

public class YourShareActionProvider extends ShareActionProvider {

    private final Drawable mYourShareIcon;

    /**
     * Constructor for <code>YourShareActionProvider</code>
     * 
     * @param context The {@link Context} to use
     */
    public YourShareActionProvider(Context context) {
        super(context);
        mYourShareIcon = context.getResources().getDrawable(R.drawable.your_share_icon);
    }

    @Override
    public View onCreateActionView(MenuItem forItem) {
        final View actionView = super.onCreateActionView(forItem);
        try {
            final Class<?> acv = Class.forName("android.widget.ActivityChooserView");
            final Method setExpandActivityOverflowButtonDrawable = acv.getMethod(
                    "setExpandActivityOverflowButtonDrawable", Drawable.class);
            setExpandActivityOverflowButtonDrawable.invoke(actionView, mYourShareIcon);
        } catch (final Exception ignored) {
            // Nothing to do
        }
        return actionView;
    }

}

菜单项

<item
    android:id="@+id/share_option"
    android:actionProviderClass="your.path.to.YourShareActionProvider"
    android:showAsAction="ifRoom"
    android:title="@string/Share"/>

结果

例子

于 2014-04-22T17:00:26.750 回答