Изменение значков панели действий 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"/>
Результаты