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