Изменение значков панели действий Android по умолчанию

Я использую панель действий с последними SDK и API (4.4.2). Я использую свою собственную тему; обычай черно-белый. Я не могу понять, как изменить стандартные значки "назад" и "поделиться". Они сероватые, я хочу, чтобы это было чисто черным. Как я могу это сделать? Другие вопросы и ответы не помогают.

Я попытался использовать и установить drawable для значка общего доступа, но он не изменился... Я не знаю, как изменить кнопку "Назад".

<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"/>

1 ответ

Решение

Индикатор "вверх" может быть тематическим, используя атрибут 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"/>

Результаты

пример

Другие вопросы по тегам