Twitter Kit
Show Tweets
TweetUI kit provides TweetViews to render Tweets in your app via code or in XML.
Features:
Two variants to choose from:
-- TweetView: Standard Tweet view with photo forward and share button.
-- CompactTweetView: Tweet view with cropped photo, for use in list displays.Tap Tweet view to open Tweet permalink using default url intent.
- Adapters to simplify displaying lists of Tweets.
Note
Tweets can be rendered using user authentication or guest authentication
Tweet Views
The TweetUi kit
provides the TweetView
and CompactTweetView
views for rendering Tweets. The view constructors take a context, the Tweet to be rendered, and an optional style.
The TweetUi kit provides the TweetView and CompactTweetView views for rendering Tweets. The view constructors take a context, the Tweet to be rendered, and an optional style.
Tweets can be requested through the TwitterCore Tweet API
with a valid session (e.g. from a user login) or without a token through TweetUi's TweetUtils
. Here is an example using TweetUtils
to load Tweets and construct Tweet views in the success callback.
Single Tweet
// 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();
}
});
}
Multiple Tweets
// 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();
}
});
}
With a valid session, the API StatusesService
can be used to load Tweets. TweetViews and CompactTweetViews can be constructed and added in the API callback success.
Note
WithFragments
, be sure to check that thegetActivity()
context argument to the Tweet view constructor in the success callback is non-null.
XML
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>
Note
You must use the layout parametersandroid:layout_width="match_parent"
andlayout_height="wrap_content"
.
Tweet List Adapters
To place Tweets in a ListView or similar ViewGroup, the TweetViewAdapter or TweetViewFetchAdapter are recommended. The TweetViewAdapter extends Android's BaseAdapter by providing a setTweets method to update the Tweet collection. The TweetViewFetchAdapter extends this further to provide a setTweetIds method which loads Tweets by id into the underlying collection and takes an optional callback.
By default, the adapters provide CompactTweetView views which are suitable for ListViews.
Here is an example of a ListActivity of Tweet views.
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();
}
});
}
}
and a corresponding tweet_list.xml layout:
<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>
A ListView of CompactTweetViews
Styling
The TweetUi kit provides two Android styles tw__TweetLightStyle
and tw__TweetDarkStyle
. The light style is used by default.
The desired style may be specified in the view's constructor.
// 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();
}
});
}
For Tweet views in XML, the style may be set by the standard @style attribute.
<!--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"/>
To style the Tweet views returned by a TweetViewAdapter or TweetViewFetchAdapter, override the getTweetView method the adapter should use to construct a Tweet view with the desired style.
final TweetViewFetchAdapter adapter = new TweetViewFetchAdapter<CompactTweetView>(getActivity()) {
@Override
public CompactTweetView getTweetView(Context context,
Tweet tweet) {
return new CompactTweetView(context,
tweet,
R.style.tw__TweetDarkStyle);
}
};
Custom Styling
TweetView and CompactTweetView respect custom style attributes to change the way a Tweet looks:
-
tw__container_bg_color
- the background color of the Tweet -
tw__primary_text_color
- the Tweet text color and author name color -
tw__action_color
- the color of the Share Tweet text and links
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>
Alternately, you may create a theme or a style that sets one or more of the custom attributes. A theme can be applied to the application or activities while a style can be applied to individual views.
<!--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>
If a Tweet view renders and one of the custom style attributes is not set, the value defaults to the tw__TweetLightStyle
's value.
Questions? Learn more from our Android docs