Как скрыть значок share action (который используется чаще всего) рядом с поставщиком share action?
Смотрите картинку. Как скрыть значок "P", который означает "поделиться с Pinterest"?
Они оба находятся на панели действий, и я использую ActionBarSherlock.
3 ответа:
Если вы хотите сохранить всю модель данных истории общего доступа , но просто не хотите лишнюю "активность общего доступа по умолчанию" icom. Ответ на Как отключить историю общего доступа при использовании ShareActionProvider? недостаточно хорош.
То, что вы должны сделать, это:
- скопируйте эти классы из ActionBarSherlock в код проекта
- ShareActionProvider.java
- ActivityChooserView.java
- в вашем ShareActionProvider.Ява класс, импортируйте ActivityChooserView.java, который вы только что скопировали вместо расположения файла ActionBarShelock
- в ActivityChooserView.Ява -
- найти строку
if (activityCount > 0 && historySize > 0)
- заменить эту строку на
if (false)
(это довольно уродливо, но это самое быстрое решение. вы можете углубиться в код, чтобы удалить все вхождения реализации DefaultActivity)редактировать: Не забудьте установить новый
ActionProvider
в пункт меню, из XML it выглядело бы так: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); }