Action Bar의 공유 버튼에 공유 기록을 표시하는 방법

10297 단어 Android

ShareActionProvider


ICS 이후에는 Action Bar에서 공유 MenuItem을 설정할 때 공유 이력을 표시할 수 있습니다.
ShareAction Provider는 구현을 위한 메커니즘으로 도입되었습니다.

이루어지다


먼저, menu 정의에서 공유 MenuItem을 정의합니다.
이때 android:actionProviderClass 속성에 정의android.widget.ShareActionProvider됩니다.
이 속성을 정의한 후 공유 아이콘을 자동으로 설정합니다.android:showAsActionnever에서도 정상적으로 일했지만 최신 역사 기록이 사라졌기 때문에 ifroomalways가 가장 좋다.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MyActivity">
    <item
        android:id="@+id/action_share_always"
        android:actionProviderClass="android.widget.ShareActionProvider"
        android:showAsAction="always"
        android:title="@string/action_share" />
</menu>
그런 다음 소스 코드 측면에서 MenuItem 을 설정합니다.
사용ShareActionProvider의 경우 공유 동작에서 실행IntentonCreateOptionsMenu에서 지정할 수 있기 때문에 onOptionsItemSelected에서 처리할 필요가 없다.
또한 아래의 예에서 사용ShareCompat.IntentBuilder하지만 일반적으로 생성IntentsetShareIntent해도 문제없이 이동한다.
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);

        // ShareActionProvider の設定
        MenuItem actionItem = menu.findItem(R.id.action_share_always);
        ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider();
        // インテントの設定
        Intent shareIntent = ShareCompat.IntentBuilder.from(this)
                .setText("hogehoge")
                .setType("text/plain")
                .getIntent();
        // ShareActionProviderにインテントの設定
        actionProvider.setShareIntent(shareIntent);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // 何も書かなくてOK
        return super.onOptionsItemSelected(item);
    }

액션


공유 아이콘을 처음 눌렀을 때 아래 팝업을 표시합니다.

모두 보이기→트위터 선택, 트위터에서 돌아오면 바로 이런 화면.
여러 앱을 통해 공유를 시도한 결과 왼쪽 공유 아이콘이 클릭한 팝업도 최신 이전의 기록이었다.

ShareCompat

ShareActionProvider 편리하지만 ICS 이후에만 가능하다.
ICS 이전의 단말기와 대응하는 응용에서 똑같이 실현하기 위해SupportLibraryShareCompat를 이용한다.
그러나 사용ShareCompat하더라도 ICS 이전 터미널에는 이력이 표시되지 않습니다.
이 부근은 NotificationCompat 등과 같다.

이루어지다

ShareCompat에서 실현될 때menu 정의에 특별한 표시가 필요하지 않습니다.
그러나 기본 공유 아이콘이 설정되어 있지 않기 때문에 정의가 필요합니다.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MyActivity">
    <item
        android:id="@+id/action_share_always"
        android:icon="@android:drawable/ic_menu_share"
        android:title="共有"
        app:showAsAction="always" />
</menu>
원본 코드 측면의 처리는 ShareActionProvider의 부분을 다시 쓰는 ShareCompat의 형식이 되었다.ShareActionProvider와 마찬가지로 onOptionsItemSelected의 처리가 특별히 필요하지 않습니다.
그러나 Intent가 아닌 전달ShareCompat.IntentBuilder이어서 다소 제한이 생겼다.
예를 들어 ShareCompat.IntentBuilder에서 지정할 수 없기 때문setAction()이나 ACTION_SEND 이외의 동작ACTION_SEND_MULTIPLE을 지정할 수 없다(약간 자신이 없다...).
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.my, menu);

        // IntentBuilderの生成
        ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(this);
        builder.setText("hogehoge")
                .setType("text/plain");
        // MenuItemにShareアクションの設定
        ShareCompat.configureMenuItem(menu, R.id.action_share_always, builder);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

액션


ICS 이후의 단말기의 행동은 ShareActionProvider와 변화가 없다.
이전 단말기에서menu의 xml에서 지정한 아이콘만 표시하고 헤더를 뽑을 때 IntentBuilder 생성된 Intent 만 표시합니다.
물리적 메뉴 버튼이 있는 기종도 마찬가지다.

총결산


Action Bar에 공유 버튼을 설치하는 안드로이드 애플리케이션은 많습니다.ShareActionProvider,ShareCompat를 사용하면 (ICS 이후만) 아주 적은 시간에 공유 버튼을 풍부하게 공유할 수 있기 때문에 상당히 편리하다고 생각합니다.
개인적으로도 편리한 만큼 앱 제작자가 꾸준히 이뤄내길 바란다.

좋은 웹페이지 즐겨찾기