2015-04-21 12 views
8

sto di fronte a un problema sconosciuto utilizzando nuova Facebook SDK di Android 4. Con vecchia versione SDK stavo usando:Facebook pulsante Login: applicare stile personalizzato

<com.facebook.login.widget.LoginButton 
    xmlns:fb="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/fb_button" 
    style="@style/FacebookLoginButton" 
    android:layout_width="485dp" 
    android:layout_height="64dp" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="-17dp" 
    fb:login_text="@string/login_with_facebook" 
    fb:logout_text="Logout" /> 

sezione FacebookLoginButton di style.xml assomiglia

<style name="FacebookLoginButton"> 
    <item name="android:background">@drawable/button_facebook</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textSize">21sp</item> 
    <item name="android:gravity">center</item> 
</style> 

drawable/button_facebook contiene png di una forma di pulsante personalizzata. Ora con la vecchia versione di sdk everithing funziona bene, ma con il nuovo sdk qualcosa è andato storto. ottengo questo:

enter image description here

come si può vedere, c'è due icone facebook: quella cerchiata è di pulsante Facebook, il secondo (quello grande) appartiene button_facebook drawable). C'è un modo per nascondere l'icona cerchiata?

+0

pulsante Crea proprio e immagine di sfondo impostato .. e quindi chiamare facebook fare clic sul pulsante .. – Destro

risposta

14

Anche ho affrontato lo stesso problema mentre stavo lavorando con login fb .... ho risolto il problema aggiungendo il seguente codice ....

fbLoginButton.setBackgroundResource(R.drawable.facebook); 
    fbLoginButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); 
    fbLoginButton.setCompoundDrawablePadding(0); 
    fbLoginButton.setPadding(0, 0, 0, 0); 
    fbLoginButton.setText(""); 

e qui è il mio layout xml:

<com.facebook.widget.LoginButton 
      xmlns:fb="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/fbLoginButton" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      fb:login_text="" 
      fb:logout_text="" 
      android:scaleType="centerInside" /> 

Spero che ti aiuti.

EDIT 1:
Facebook potrebbe cambiare la posizione della classe LoginButton che è presente all'interno del suo SDK in modo da u potrebbe essere necessario modificare il tag XML di conseguenza. Nel mio caso era all'interno di com.facebook.widget.LoginButton ricontrollare.

+0

ma si utilizza com.facebook.widget.LoginButton, sto usando com.facebook.login.widget.LoginButton – giozh

+0

non ha importanza .... denota la posizione della classe LoginButton all'interno del facebookSDK .... potrei aver usato una versione precedente di fb ... aggiungendo il codice java risolverà il tuo problema ... sono sicuro al 100% su di esso –

+1

ok grazie. Tu salvi la mia giornata! – giozh

4

Si può semplicemente utilizzare android:drawableLeft="@null" per sbarazzarsi del piccolo Facebook icona

+0

Perché Facebook non sta cambiando Android: drawableLeft per Android: drawableSTART = "@ null". android: drawableLeft è deprecato ... – SmilingM

19

Nell'ultimo Facebook v4 API questa è la risposta corretta:

<com.facebook.login.widget.LoginButton 
    xmlns:facebook="http://schemas.android.com/apk/res-auto" 
    facebook:com_facebook_login_text="LOGIN" 
    facebook:com_facebook_logout_text="LOGOUT"/> 
+1

@Mythul ... grazie ... ma dove hai trovato la documentazione per questo? –

+0

Se ricordo bene, era nascosto in qualche modo nella loro documentazione ufficiale. Ho passato 1-2 giorni a trovarlo per essere onesto. – Mythul

+0

@Mythul ... hai ancora il link? Grazie in anticipo –

0
<FrameLayout 
    android:id="@+id/facebook_lay" 
    android:layout_width="0dp" 
    android:layout_height="40dp" 
    android:layout_weight="1" 
    android:background="@drawable/facebook_button_bg"> 

    <com.lovetohave.love.ui.LoveTextView 
     android:id="@+id/facebook_txt" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="?attr/selectableItemBackgroundBorderless" 
     android:clickable="true" 
     android:gravity="center" 
     android:text="@string/facebook" 
     android:textColor="@color/white" 
     android:textSize="@dimen/material_small" 
     app:customFont="fonts/Roboto-Medium.ttf" /> 

    <com.rey.material.widget.ProgressView 
     android:id="@+id/fb_progress_view_cir" 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:layout_gravity="center" 
     android:visibility="gone" 
     app:cpd_strokeColor="#fff" 
     app:cpd_strokeSize="1dp" 
     app:pv_autostart="true" 
     app:pv_circular="true" 
     app:pv_progressMode="indeterminate" 
     app:pv_progressStyle="@style/CircularProgress1" /> 

</FrameLayout> 

È possibile progettare come TextView o il pulsante .e aggiungi il seguente codice all'interno dell'evento click del pulsante.

LoginManager.getInstance().logOut(); 
LoginManager.getInstance().logInWithReadPermissions(SignIn.this, permissionNeeds); 

Poi mise seguente codice nel metodo onCreate per ottenere informazioni profilo

LoginManager.getInstance().registerCallback(callbackManager, 
    new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      mAccessToken = loginResult.getAccessToken() 
        .getToken(); 
      PrefUtil.saveData("accesstoken", 
        mAccessToken, SignIn.this); 
      GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 

         @Override 
         public void onCompleted(org.json.JSONObject object, 
               GraphResponse response) { 


          } catch (org.json.JSONException e) { 
           // TODO Auto-generated catch block 

           e.printStackTrace(); 
          } catch (Exception e) { 
           e.printStackTrace(); 
          } 

         } 
        }); 
      Bundle parameters = new Bundle(); 
      parameters 
        .putString(
          "fields", 
          "id,name,email,gender,birthday,first_name,last_name,location,picture"); 
      request.setParameters(parameters); 
      request.executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
      Log.i(TAG, "LoginManager FacebookCallback onCancel"); 
      mFbProgressBar.setVisibility(View.GONE); 
      mFacebookTxt.setVisibility(View.VISIBLE); 
      if (pendingAction != PendingAction.NONE) { 
       showAlert(); 
       pendingAction = PendingAction.NONE; 
      } 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      mFbProgressBar.setVisibility(View.GONE); 
      mFacebookTxt.setVisibility(View.VISIBLE); 
      Log.i(TAG, "LoginManager FacebookCallback onError"); 
      if (pendingAction != PendingAction.NONE 
        && exception instanceof FacebookAuthorizationException) { 
       showAlert(); 
       pendingAction = PendingAction.NONE; 
      } 
     } 

     private void showAlert() { 
      new AlertDialog.Builder(SignIn.this) 
        .setTitle(R.string.cancelled) 
        .setMessage(R.string.permission_not_granted) 
        .setPositiveButton(R.string.ok, null).show(); 
     } 
    });