2014-01-26 26 views
2

我按照本教程(this)實現了Facebook登錄,但它可以相應地登錄和檢索我的電子郵件,我想實現自定義登錄圖標的問題。如何自定義com.facebook.widget.LoginButton的用戶界面

這是我嘗試登錄XML

<com.facebook.widget.LoginButton 
     android:id="@+id/authButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginTop="30dp" 
     android:src="@drawable/ic_launcher" /> 

活動:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lblEmail = (TextView) findViewById(R.id.t); 

    LoginButton authButton = (LoginButton) findViewById(R.id.authButton); 
    authButton.setOnErrorListener(new OnErrorListener() { 

     @Override 
     public void onError(FacebookException error) { 
      Log.i(TAG, "Error " + error.getMessage()); 
     } 
    }); 
    // set permission list, Don't foeget to add email 
    authButton.setReadPermissions(Arrays.asList("basic_info", "email")); 
    // session state call back event 
    authButton.setSessionStatusCallback(new Session.StatusCallback() { 

     @SuppressWarnings("deprecation") 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 

      if (session.isOpened()) { 
       Log.i(TAG, "Access Token" + session.getAccessToken()); 
       Request.executeMeRequestAsync(session, 
         new Request.GraphUserCallback() { 
          @Override 
          public void onCompleted(GraphUser user, 
            Response response) { 
           if (user != null) { 
            Log.i(TAG, "User ID " + user.getId()); 
            Log.i(TAG, 
              "Email " 
                + user.asMap().get(
                  "email")); 
            lblEmail.setText(user.asMap() 
              .get("email").toString()); 
           } 
          } 
         }); 
      } 

     } 
    }); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session.getActiveSession().onActivityResult(this, requestCode, 
      resultCode, data); 
} 

感謝

回答

1

我這樣做,我自己就在不久前,它需要改變的背景資源,但是通過XML來完成它將不起作用,因爲它在構造函數中被硬編碼。

您應該擴展LoginButton類和創建雙PARAM構造如下

public LoginButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.setBackgroundResource(R.drawable.my_own_drawable); 
    this.setCompoundDrawablesWithIntrinsicBounds(R.drawable.my_own_icon, 0, 0, 0); 
    } 
+0

感謝您的幫助。你也介意看看這個Facebook的SDK問題? http://stackoverflow.com/questions/21364257/why-the-facebook-sdk-is-not-imported非常感謝 – user782104