Как скрыть значок общего ресурса (который используется чаще всего) рядом с поставщиком общего ресурса?
Смотрите картинку. Как я могу скрыть значок "P", что означает поделиться с Pinterest?
Они оба на панели действий, и я использую ActionBarSherlock.
3 ответа
Если вы хотите сохранить всю модель данных истории общего ресурса, но просто не хотите, чтобы была добавлена дополнительная активность по умолчанию для общего ресурса. Ответ на Как вы отключите историю обмена при использовании ShareActionProvider? не достаточно хорош
Что вы должны сделать, это:
- Скопируйте эти классы из ActionBarSherlock в код своего проекта
- ShareActionProvider.java
- ActivityChooserView.java
- В своем классе ShareActionProvider.java импортируйте только что скопированный файл ActivityChooserView.java вместо расположения файла ActionBarShelock.
- На ActivityChooserView.java -
- найти линию
if (activityCount > 0 && historySize > 0)
- заменить эту строку на
if (false)
(это довольно уродливо, но это самое быстрое исправление. вы можете углубиться в код, чтобы удалить все вхождения реализации DefaultActivity)
- найти линию
Изменить: не забудьте установить новый ActionProvider
для вашего пункта меню, из XML это будет выглядеть так: android:actionProviderClass="com.*.CustomShareActionProvider"
Это оно!
Я нашел способ обойти это. Я использую библиотеку поддержки 23.0.1, я не проверял это на других версиях библиотеки поддержки.
Решение легко, когда вы создаете ShareActionProvider, просто переопределяете метод onCreateActionView() и возвращаете для него значение null. Затем вы можете отслеживать всю историю во всплывающем меню, но история не будет отображаться на панели инструментов.
Вот пример кода:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem item = menu.add(Menu.NONE, R.id.menu_share, Menu.NONE, R.string.share);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
mShareActionProvider = new ShareActionProvider(this) {
@Override
public View onCreateActionView() {
return null;
}
};
item.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha);
MenuItemCompat.setActionProvider(item, mShareActionProvider);
return true;
}
В настоящее время я не нашел никаких проблем с использованием этой работы вокруг.
Исходя из ответа Шона, я создал необходимые классы, вы можете скопировать их в свой проект ( https://gist.github.com/saulpower/10557956). Это не только добавляет возможность отключать историю, но и фильтрует приложения, с которыми вы хотели бы поделиться (если вы знаете имя пакета).
private final String[] INTENT_FILTER = new String[] {
"com.twitter.android",
"com.facebook.katana"
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.journal_entry_menu, menu);
// Set up ShareActionProvider's default share intent
MenuItem shareItem = menu.findItem(R.id.action_share);
if (shareItem instanceof SupportMenuItem) {
mShareActionProvider = new ShareActionProvider(this);
mShareActionProvider.setShareIntent(ShareUtils.share(mJournalEntry));
mShareActionProvider.setIntentFilter(Arrays.asList(INTENT_FILTER));
mShareActionProvider.setShowHistory(false);
((SupportMenuItem) shareItem).setSupportActionProvider(mShareActionProvider);
}
return super.onCreateOptionsMenu(menu);
}