Using custom login button with Twitter Fabric? Using custom login button with Twitter Fabric? android android

Using custom login button with Twitter Fabric?


You can achieve this by using TwitterAuthClient. i.e,

First of all create normal button like,

<Button      android:id:"@+id/twitter_custom_button"      ...  />

Now, in you java class file use TwitterAuthClient instead of TwitterLoginButton. then set your CallBack inside Button's onClick

TwitterAuthClient mTwitterAuthClient= new TwitterAuthClient();Button twitter_custom_button = (Button) findViewById(R.id.twitter_custom_button);twitter_custom_button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {             mTwitterAuthClient.authorize(this, new com.twitter.sdk.android.core.Callback<TwitterSession>() {                       @Override                       public void success(Result<TwitterSession> twitterSessionResult) {                           // Success                       }                       @Override                       public void failure(TwitterException e) {                           e.printStackTrace();                       }            });        }});@Overrideprotected void onActivityResult(int requestCode, int responseCode, Intent intent) {    mTwitterAuthClient.onActivityResult(requestCode, responseCode, intent);}


Well actually there's a way of doing this

 private TwitterAuthClient client;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_login);    TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);    Fabric.with(this, new Twitter(authConfig));    client = new TwitterAuthClient();    Button customLoginButton = (Button) findViewById(R.id.custom_twitter_login);    customLoginButton.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            client.authorize(LoginActivity.this, new Callback<TwitterSession>() {                @Override                public void success(Result<TwitterSession> twitterSessionResult) {                    Toast.makeText(LoginActivity.this, "success", Toast.LENGTH_SHORT).show();                }                @Override                public void failure(TwitterException e) {                    Toast.makeText(LoginActivity.this, "failure", Toast.LENGTH_SHORT).show();                }            });        }    });}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    client.onActivityResult(requestCode, resultCode, data);}

Be aware, onActivityResult part is very important, you seem to lost it.

here's my xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Button    android:id="@+id/custom_twitter_login"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_marginTop="@dimen/padding_medium"    android:text="@string/twitter_login"/>


Since Fabric doesn't allow theming yet, we should assume that we'll have to write potentially throw away code to get this to work. As such, I prefer less code to more code when I know I won't be keeping it.

Luis's solution will work fine, but my UI was done, with a button already, and I just wanted that button to work. Here's how I accomplished this.

Drop in the TwitterLoginButton, as requested by the Fabric wizard, but set it to visibility: gone

 <com.twitter.sdk.android.core.identity.TwitterLoginButton    android:id="@+id/twitter_login_button"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerInParent="true"    android:visibility="gone" />

Pull the reference of the loginButton in your Activity (also part of Fabric setup - nothing new here):

loginButton = (TwitterLoginButton) findViewById(R.id.twitter_login_button);

Finally, for my existing button, I added a click listener, which simply delegated the click event over to the twitter login button.

myLoginButton.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            loginButton.performClick();        }    });

Worked like a charm.