2013-07-22 10 views
7

私は自分のアプリにアクションバーを置いておきたいのですが、アクションバーで提供されている共有ボタンを残したいと思っています。ShareActionProvider androidのアクションバーなし

これはアクションバーがあるときに行われます。

public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main, menu); 
    ShareActionProvider provider = (ShareActionProvider) 
    menu.findItem(R.id.menu_share).getActionProvider(); 

    if (provider != null) { 
     Intent shareIntent = new Intent(); 
     shareIntent.setAction(Intent.ACTION_SEND); 
     shareIntent.putExtra(Intent.EXTRA_TEXT, "hi"); 
     shareIntent.setType("text/plain"); 
     provider.setShareIntent(shareIntent); 
    } 

    return true; 
} 

menu.xmlはメニューフォルダに保存されています。

ここで、他のレイアウトも定義されているxmlに自分の共有ボタンが必要です。

助けてくださいか?

+2

'ShareActionProvider'はActionBar''なしでは動作しません。しかし、それは[実装](https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/ShareActionProvider.java)を見ていくつかのアイデアを得るべきです。 – zapl

答えて

5

PackageManagerqueryIntentActivities()を使用して、呼び出すACTION_SENDIntentの処理方法を知っているアプリを見つけてください。必要に応じて結果リストを表示します。ユーザーが選択すると、ACTION_SENDIntentを作成し、ユーザーが選択した特定のアクティビティのComponentNameを指定し、startActivity()を呼び出します。

+0

これでもっと手伝ってもらえますか?コンポーネント名が分からない場合はどうしますか? または任意の記事へのリンクが役立ちます。 – user2607444

+0

@ user2607444:「コンポーネント名が分からない場合は?」 - はい、私の答えの最初の2つの文の背後にある点です。たとえば、次のような同様の操作を実行するランチャーがありますが、 'ACTION_MAIN' /' CATEGORY_HOME'の場合:https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot – CommonsWare

1

ACTION_SENDにインテントを使用します。たとえば、ボタンをクリックすると、次の操作を実行できます。

Intent It = new Intent(Intent.ACTION_SEND); 
It.setType("text/plain"); 
It.putExtra(android.content.Intent.EXTRA_TEXT,"your_text_to_share"); 
YourActivity.this.startActivity(It); 
+0

ありがとうアンドリュー:私は携帯電話を使っていました(それは私のものではなく、コードを正しく書くためには "スマートな"電話でもありませんでした) –

7

コンテンツを共有するためのアクションバーは必要ありません。実際、アクションバーを使っても、ほとんどのアプリでは視覚的なデザイナーがそれを嫌い、ユーザーデバイス上の最新の共有機能の多く(連絡先への直接共有など)をサポートしていないため、ShareActionProviderを使用していません。その代わりに、Intent.createChooserを使用してより堅牢な共有ダイアログを作成する必要があります。

Intent sendIntent = new Intent(); 
sendIntent.setAction(Intent.ACTION_SEND); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); 
sendIntent.setType("text/plain"); 
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to))); 

http://developer.android.com/training/sharing/send.html

どこでもあなたのアプリ内から共有するためのより良い方法はShareCompatを使用することです。ここでは簡単な例です:

ShareCompat.IntentBuilder.from(this) 
      .setType("text/plain") 
      .setText("I'm sharing!") 
      .startChooser(); 

他の例は、ここで見つけることができます:https://android.googlesource.com/platform/development/+/master/samples/Support4Demos/src/com/example/android/supportv4/app/SharingSupport.java

関連する問題