В этом уроке
Реализация эффективного и удобного действия “поделиться” в ActionBar
стала еще проще с введением ActionProvider
в Android 4.0 (API Уровень 14). ActionProvider
, сразу после присоединения к пункту меню в панели действий, обрабатывает как внешний вид, так и поведение этого элемента. В случае ShareActionProvider
, вы предоставляете интент “обмена” и он сделает все остальное.
Примечание: ShareActionProvider
доступен начиная с Уровня API 14 и выше.
[wpanchor id=”1″]
Обновление макета меню в android приложении
Чтобы начать работу с ShareActionProviders
, определите android:actionProviderClass
атрибут для соответствующего<item>
в вашем ресурс меню файле:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_item_share" android:showAsAction="ifRoom" android:title="Share" android:actionProviderClass= "android.widget.ShareActionProvider"/> ... </menu>
Это делегирует ответственность за внешний вид элемента и функции в ShareActionProvider
. Однако, вам нужно будет сообщить провайдеру, чем вы хотели бы поделиться.
[wpanchor id=”2″]
Установка интента для обмена данными между android приложениями
Чтобы ShareActionProvider
функционировал, необходимо предоставить интент для обмена. Этот интент должен быть таким же, как описано в уроке Отправка простых данных в другие приложения , с действием ACTION_SEND
и дополнительными данными установленных с помощью EXTRA_TEXT
и EXTRA_STREAM
. Чтобы назначить интент обмена, сначала найдите соответствующий MenuItem
в своем ресурсе меню в вашем Activity
или Fragment
. Далее, вызовите MenuItem.getActionProvider()
для получения экземпляра ShareActionProvider
. Используйте setShareIntent()
для обновления интента обмена, связанного с этим элементом действия. Вот пример:
private ShareActionProvider mShareActionProvider; ... @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate menu resource file. getMenuInflater().inflate(R.menu.share_menu, menu); // Locate MenuItem with ShareActionProvider MenuItem item = menu.findItem(R.id.menu_item_share); // Fetch and store ShareActionProvider mShareActionProvider = (ShareActionProvider) item.getActionProvider(); // Return true to display menu return true; } // Call to update the share intent private void setShareIntent(Intent shareIntent) { if (mShareActionProvider != null) { mShareActionProvider.setShareIntent(shareIntent); } }
Вам необходимо установить интент обмена только один раз, во время создания вашего меню, или же вы можете установить его, а затем обновлять его по мере изменений пользовательского интерфейса. Например, при просмотре фотографий в полноэкранном режиме в приложении Галерея, интент обмена изменяется, когда вы переключаетесь между фотографиями.
Подробнее об объекте ShareActionProvider
, см. Панель действий.