TweetUi キットでは、あなたのアプリでコードやXMLでツイートを描写するツイートビューが使用できます。
機能:
注意
ユーザー認証 やゲスト認証を使った場合でもツイートを表示することができます。
TweetUi キットではツイートを描写するのに TweetView と CompactTweetView が使用できます。このビューのコンストラクタでは、context、描写されるツイート、必要に応じてスタイル、といったものを引数として設定します。
ツイートは、有効なセッション(例えば、ユーザーがログインしている状態)でのTwitterCore Tweet API、もしくはトークンを使わない TweetUiの TweetUtilsによってリクエストすることができます。 以下に、TweetUtils を使ってツイートを読み込み、success メソッド内でツリービューのコンストラクタを実行する例を示します。
// EmbeddedTweetsActivity import com.twitter.sdk.android.core.models.Tweet; import com.twitter.sdk.android.core.TwitterException; import com.twitter.sdk.android.tweetui.LoadCallback; import com.twitter.sdk.android.tweetui.TweetUtils; import com.twitter.sdk.android.tweetui.TweetView; ... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_embedded_tweets); final LinearLayout myLayout = (LinearLayout) findViewById(R.id.my_tweet_layout); final long tweetId = 510908133917487104L; TweetUtils.loadTweet(tweetId, new LoadCallback<Tweet>() { @Override public void success(Tweet tweet) { myLayout.addView(new TweetView( EmbeddedTweetsActivity.this, tweet)); } @Override public void failure(TwitterException exception) { // Toast.makeText(...).show(); } }); }
写真が付いたTweetView。
// EmbeddedTweetsActivity import com.twitter.sdk.android.core.models.Tweet; import com.twitter.sdk.android.core.TwitterException; import com.twitter.sdk.android.tweetui.LoadCallback; import com.twitter.sdk.android.tweetui.TweetUtils; import com.twitter.sdk.android.tweetui.CompactTweetView; ... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_embedded_tweets); final LinearLayout myLayout = (LinearLayout) findViewById(R.id.my_tweet_layout); final List<Long> tweetIds = Arrays.asList(510908133917487104L, 20L); TweetUtils.loadTweets(tweetIds, new LoadCallback<List<Tweet>>() { @Override public void success(List<Tweet> tweets) { for (Tweet tweet : tweets) { myLayout.addView( new CompactTweetView( EmbeddedTweetsActivity.this, tweet)); } } @Override public void failure(TwitterException exception) { // Toast.makeText(...).show(); } }); }
セッションが有効であれば、StatusesService APIを使用してツイートを読み込むことができます。successメソッド内で TweetViews とCompactTweetViews のコンストラクタを実行し、レイアウトに追加することができます。
注意
Fragments
を使用している場合、successメソッド内でツリービューのコンストラクタに渡すcontext引数がnullにならないようにしてください。
The TweetView and CompactTweetView can be inflated from an XML layout as well. For this usage, the tw__tweet_id
attribute must specify the Tweet id and the Tweet will be loaded and rendered upon inflation.
<!--my_tweet_activity.xml--> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:twittersdk="http://schemas.android.com/apk/res-auto"> <com.twitter.sdk.android.tweetui.TweetView android:id="@+id/bike_tweet" android:layout_width="match_parent" android:layout_height="wrap_content" twittersdk:tw__tweet_id="510908133917487104"/> </FrameLayout>
注意
レイアウトのパラメータにはandroid:layout_width="match_parent"
とlayout_height="wrap_content"
を使用しなければなりません。
ツイートをListView や同様のViewGroupに設置するには、TweetViewAdapter もしくはTweetViewFetchAdapterが推奨されています。 TweetViewAdapter は、 ツイートコレクションを更新するsetTweets メソッドを追加してAndroidのBaseAdapter を拡張しています。 TweetViewFetchAdapter は、IDから基コレクションにツイートを読み込み、必要に応じてコールバック関数の設定できるsetTweetIds メソッドを追加して、TweetViewAdapter をさらに拡張しています。
既定では、このアダプターはListViewsに適している CompactTweetView を提供します。
以下がツイートビューのListActivity のサンプルです。
import com.twitter.sdk.android.core.models.Tweet; import com.twitter.sdk.android.core.TwitterException; import com.twitter.sdk.android.tweetui.LoadCallback; import com.twitter.sdk.android.tweetui.CompactTweetView; import com.twitter.sdk.android.tweetui.TweetViewFetchAdapter; ... public class TweetListActivity extends ListActivity { List<Long> tweetIds = Arrays.asList(503435417459249153L, 510908133917487104L, 473514864153870337L, 477788140900347904L); final TweetViewFetchAdapter adapter = new TweetViewFetchAdapter<CompactTweetView>( TweetListActivity.this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tweet_list); setListAdapter(adapter); adapter.setTweetIds(tweetIds, new LoadCallback<List<Tweet>>() { @Override public void success(List<Tweet> tweets) { // my custom actions } @Override public void failure(TwitterException exception) { // Toast.makeText(...).show(); } }); } }
そして以下が対応するtweet_list.xml レイアウトです:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal|center_vertical" android:text="@string/empty"/> <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:drawSelectorOnTop="false"/> </LinearLayout>
CompactTweetViewsを設置したListView
TweetUi キットではtw__TweetLightStyle
とtw__TweetDarkStyle
の二つのAndroid スタイルが使用できます。既定ではtw__TweetLightStyle
が使用されます。
設定したいスタイルは、ビューのコンストラクタ実行時に設定できます。
// EmbeddedTweetActivity.java import com.twitter.sdk.android.tweetui.TweetView; ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_embedded_tweet); final LinearLayout myLayout = (LinearLayout) findViewById(R.id.my_tweet_layout); final long tweetId = 510908133917487104L; TweetUtils.loadTweet(tweetId, new LoadCallback<Tweet>() { @Override public void success(Tweet tweet) { myLayout.addView(new TweetView(EmbeddedTweetsActivity.this, tweet, R.style.tw__TweetDarkStyle)); } @Override public void failure(TwitterException exception) { // Toast.makeText(...).show(); } }); }
ダークスタイルの TweetView.
XMLのTweet viewsでは、スタイルは標準の @style 属性で設定できます。
<!--my_tweet_activity.xml--> <com.twitter.sdk.android.tweetui.TweetView android:id="@+id/city_hall_tweet" style="@style/tw__TweetDarkStyle" android:layout_width="match_parent" android:layout_height="wrap_content" twittersdk:tw__tweet_id="521061104445693952"/>
TweetViewAdapter やTweetViewFetchAdapterの戻り値として取得されるツイートビューのスタイルを設定するには、 getTweetView メソッドをオーバーライドし、希望するスタイルを設定してツイートビューのコンストラクタを実行してください。
final TweetViewFetchAdapter adapter = new TweetViewFetchAdapter<CompactTweetView>(getActivity()) { @Override public CompactTweetView getTweetView(Context context, Tweet tweet) { return new CompactTweetView(context, tweet, R.style.tw__TweetDarkStyle); } };
TweetView とCompactTweetView はカスタムスタイル属性に従い、ツイートの見栄えを変更しますs:
tw__container_bg_color
- ツイートの背景色t
tw__primary_text_color
- ツイートのテキスト色と発言者名の色
tw__action_color
- 共有するツイートのテキストとリンクの色
The tw__TweetLightStyle
and tw__TweetDarkStyle
you’ve seen set these custom attributes to fixed values that produce light and dark versions. To customize the style of a Tweet view further, the easiest approach is to extend the light or dark styles.
<!--styles.xml--> <style name="CustomLightTweetStyle" parent="tw__TweetDarkStyle"> <item name="tw__primary_text_color">@color/custom_color_1</item> <item name="tw__action_color">@color/custom_color_2</item> </style>
もしくはカスタム属性を一つ以上設定してテーマやスタイルを作成することもできます。スタイルは個々のビューに適用できますが、テーマはアプリやアクティビティに適用できます。
<!--styles.xml--> <style name="CustomStyle"> <item name="tw__container_bg_color">@color/custom_color_1</item> <item name="tw__primary_text_color">@color/custom_color_2</item> </style> <style name="CustomTheme" parent="android:Theme.Holo.Light"> <item name="tw__container_bg_color">@color/custom_color_1</item> </style>
描写されたツイートビューのカスタムスタイル属性が一つも設定されていなかった場合、tw__TweetLightStyleの値が既定値になります。