personalizar el botón de inicio de sesión de Facebook

Quiero personalizar el aspecto del botón de inicio de sesión de Facebook que obtenemos junto con el sdk de Facebook para Android (facebook-android-sdk-3.0.1). Quiero un botón simple de Android que tenga el título “Login via Facebook”. No pude encontrar ninguna documentación sobre eso.

Entonces, si alguien sabe cómo hacerlo de una manera simple, por favor dígame o dígame cómo hacerlo.

Puede usar estilos para modificar el botón de inicio de sesión como este

 

y en el diseño

  

Para tener un botón de inicio de sesión completamente personalizado en Facebook sin usar com.facebook.widget.LoginButton .

De acuerdo con facebook sdk 4.x,

Existe un nuevo concepto de inicio de sesión desde Facebook

LoginManager y AccessToken : estas nuevas clases realizan Facebook Login

Entonces, ahora puede acceder a la autenticación de Facebook sin el botón de inicio de sesión de Facebook como

layout.xml

   

MainActivity.java

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(this.getApplicationContext()); callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback() { @Override public void onSuccess(LoginResult loginResult) { Log.d("Success", "Login"); } @Override public void onCancel() { Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show(); } @Override public void onError(FacebookException exception) { Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show(); } }); setContentView(R.layout.activity_main); Button btn_fb_login = (Button)findViewById(R.id.btn_fb_login); btn_fb_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends")); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } 

La mejor manera que he encontrado para hacer esto, si desea personalizar completamente el botón es crear un botón, o cualquier Vista que desee (en mi caso fue un LinearLayout ) y establecer un OnClickListener a esa vista, y llamar a la siguiente en el evento onClick:

 com.facebook.login.widget.LoginButton btn = new LoginButton(this); btn.performClick(); 

Puede modificar el botón de inicio de sesión como este

  

Y en el código I definí el recurso de fondo:

 final LoginButton button = (LoginButton) findViewById(R.id.login_button); button.setBackgroundResource(R.drawable.facebook); 

En el SDK de Facebook más reciente, el nombre de inicio de sesión y de salida de sesión es:

   
  1. Crea un botón de Facebook personalizado y cambia la visabilidad en el botón de Facebook nativo:

         
  2. Agregue listener a su botón falso y simule clic:

     facebookView.setOnClickListener(this); @Override public void onClick(View v) { if (v.getId() == R.id.facebookView){ facebookButton.performClick(); } } 
 //call Facebook onclick on your customized button on click by the following FacebookSdk.sdkInitialize(this.getApplicationContext()); callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback() { @Override public void onSuccess(LoginResult loginResult) { Log.d("Success", "Login"); } @Override public void onCancel() { Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show(); } @Override public void onError(FacebookException exception) { Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show(); } }); setContentView(R.layout.activity_main); Button mycustomizeedbutton=(Button)findViewById(R.id.mycustomizeedbutton); mycustomizeedbutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); } }); } 
   

Esto funcionó para mí. Para cambiar el texto del botón de inicio de sesión de Facebook.

Personalizar com.facebook.widget.LoginButton

paso: 1 Creando un Framelayout.

paso: 2 Para establecer com.facebook.widget.LoginButton

paso: 3 Para configurar Textview con personalizable.

     

DEBE RECORDAR

1> com.facebook.widget.LoginButton & TextView Height / Width Mismo

2> 1st declate com.facebook.widget.LoginButton luego TextView

3> Para iniciar sesión / cerrar sesión usando Click-Listener de TextView

Es un truco, no es un método apropiado.

  • Crear un diseño relativo.
  • Defina su facebook_botton.
  • También defina su botón de diseño personalizado.
  • Superponerlos.
         

Esto es muy simple. Agregue un botón en el archivo de diseño como

  

Y en onClick coloque el método registercallback () de LoginManager, porque este método se ejecuta automáticamente.

  public void fbLogin(View view) { LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("user_photos", "email", "public_profile", "user_posts" , "AccessToken")); LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions")); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback() { @Override public void onSuccess(LoginResult loginResult) { // App code } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } }); } 

Manera correcta y más limpia

Después de revisar las respuestas a continuación, parece que son una especie de hacks que se basan en la edición de la vista del botón de inicio de sesión para que sea más adecuado para su necesidad.

Imagen de demostración

Al estar en la misma posición, he logrado personalizar el botón de inicio de sesión de Facebook de manera eficiente.

  

e implementar onClickListener como tal

 FacebookLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (AccessToken.getCurrentAccessToken() != null){ mLoginManager.logOut(); } else { mAccessTokenTracker.startTracking(); mLoginManager.logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile")); } } }); 

Puede encontrar el código fuente completo en: http://medyo.github.io/customize-the-android-facebook-login-on-android