2015-04-21 12 views
8

ich bin durch den Einsatz neuer Facebook android sdk 4. Bei älteren sdk Version ein seltsames Problem konfrontiert war ich mit:Facebook Login-Button: apply benutzerdefinierten Stil

<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" /> 

FacebookLoginButton Abschnitt style.xml sieht aus wie

Drawable/button_facebook enthält PNG einer benutzerdefinierten Schaltfläche Form. Jetzt mit alten Version von SDK Everything funktioniert gut, aber mit neuen SDK etwas falsch gelaufen. i erhalten diese:

enter image description here

wie Sie sehen können, Theres zwei Facebook-Symbol: das eingekreiste ist der Facebook-Taste, die zweite (das große) gehört ziehbar button_facebook). Es gibt eine Möglichkeit, das eingekreiste Symbol zu verstecken?

+0

eigene Taste erstellen und Hintergrundbild .. Und dann rufen Sie Facebook zu bekommen .. – Destro

Antwort

14

Auch ich das gleiche Problem konfrontiert, während ich mit fb Login arbeitete .... fixiert ich das Problem, indem Sie den folgenden Code hinzufügen ....

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

und hier ist mein xml Layout:

<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" /> 

Ich hoffe, es hilft Ihnen.

EDIT 1:
Facebook könnte die Lage der LoginButton Klasse ändern, die in seinem SDK vorhanden ist, so kann u müssen entsprechend den XML-Tag ändern. In meinem Fall war es innerhalb com.facebook.widget.LoginButton überprüfen Sie es.

+0

aber Sie verwenden com.facebook.widget.LoginButton, ich benutze com.facebook.login.widget.LoginButton – giozh

+0

es spielt keine Rolle .... es bezeichnet den Speicherort der Klasse LoginButton in der FacebookSDK .... Ich könnte verwendet haben eine ältere Version von fb ... das Hinzufügen des Java-Codes löst Ihr Problem ... Ich bin 100% sicher darauf –

+1

ok Danke. Du sparst meinen Tag! – giozh

4

Sie können nur android:drawableLeft="@null" verwenden, um loszuwerden, das kleine Facebook Symbol zu erhalten

+0

Warum ändert Facebook nicht android: drawableLeft zu android: drawableSTART = "@ null". android: drawableLeft ist veraltet ... – SmilingM

19

In der neuesten Facebook v4 API ist dies die richtige Antwort:

<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 ... danke ... aber wo hast du die Dokumentation dafür gefunden? –

+0

Wenn ich mich richtig erinnere, war es irgendwo in ihrer offiziellen Dokumentation versteckt. Ich habe 1-2 Tage gebraucht, um ehrlich zu sein. – Mythul

+0

@Mythul ... hast du noch den Link? Danke im Voraus –

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> 

Sie können wie entwerfen Textview oder Taste .und folgenden Code innerhalb des Button-Click-Ereignisses hinzufügen.

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

Dann legen Sie in onCreate Methode folgenden Code Profilinformationen auf auf die Schaltfläche

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(); 
     } 
    }); 
Verwandte Themen