2013-02-25 4 views
13

Facebook Sdk für Android akzeptiert die Werte login_text und logout_text nicht, die aus XML übergeben wurden. Es ignoriert es einfach. Es gibt keine Dokumentation/Beispiel auf der Erde, die diese Anpassung der Schaltfläche verwendet.Facebook LoginButton für Android akzeptiert nicht die Werte login_text und logout_text, die von XML übergeben wurden

<com.facebook.widget.LoginButton 
    xmlns:fb="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/connectWithFbButton" 
    style="@style/com_facebook_loginview_default_style" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:layout_gravity="center_horizontal" 
    android:text="@string/connect_with_facebook" 
    fb:login_text="@string/connect_with_facebook" 
    fb:logout_text="Connecting with facebook" /> 

Es heißt immer: Anmelden oder Abmelden. Wie kann ich diese Eigenschaft verwenden? Ich habe versucht, über den LoginButton-Code zu debuggen, aber vergeblich. Es durchläuft nie einen der Konstruktoren von LoginButton() und kann daher meine benutzerdefinierten Parameter nicht analysieren.

Wurde jemand mit diesem Problem konfrontiert?

Antwort

3

Gabriel ist genau richtig. Um dies zu beheben, zu LoginButton.java in Facebook SDK und bewegen sich der parseAttributes nennt

parseAttributes(attrs) 

nach unten, so dass es immer läuft.

ganze Verfahren wird wie folgt aussehen:

public LoginButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    if (attrs.getStyleAttribute() == 0) { 
      // apparently there's no method of setting a default style in xml, 
      // so in case the users do not explicitly specify a style, we need 
      // to use sensible defaults. 
      this.setTextColor(getResources().getColor(R.color.com_facebook_loginview_text_color)); 
      this.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
        getResources().getDimension(R.dimen.com_facebook_loginview_text_size)); 
      this.setPadding(getResources().getDimensionPixelSize(R.dimen.com_facebook_loginview_padding_left), 
        getResources().getDimensionPixelSize(R.dimen.com_facebook_loginview_padding_top), 
        getResources().getDimensionPixelSize(R.dimen.com_facebook_loginview_padding_right), 
        getResources().getDimensionPixelSize(R.dimen.com_facebook_loginview_padding_bottom)); 
      this.setWidth(getResources().getDimensionPixelSize(R.dimen.com_facebook_loginview_width)); 
      this.setHeight(getResources().getDimensionPixelSize(R.dimen.com_facebook_loginview_height)); 
      this.setGravity(Gravity.CENTER); 

     if(isInEditMode()) { 
      // cannot use a drawable in edit mode, so setting the background color instead 
      // of a background resource. 
      this.setBackgroundColor(getResources().getColor(R.color.com_facebook_blue)); 
      // hardcoding in edit mode as getResources().getString() doesn't seem to work in IntelliJ 
      loginText = "Log in"; 
     } else { 
      this.setBackgroundResource(R.drawable.com_facebook_loginbutton_blue); 
      initializeActiveSessionWithCachedToken(context); 
     } 
    } 
    parseAttributes(attrs); 
} 

sowohl Stil und login_text nun unter Betracht gezogen werden. Funktioniert gut für mich.

1

Ich musste nur den Text in der FacebookSDK-Quelle ändern.

Der Login-String ist com_facebook_loginview_log_in_button befindet sich in FacebookSDK/res/values/strings.xml

+0

Warum hacken Sie so? Es gibt eine unterstützte Möglichkeit, den Text zu ändern. – greg7gkb

+0

Wenn Sie android Studio verwenden, sagen Sie auf Wiedersehen zu diesem Niveau der Kontrolle –

+0

Es gibt keinen Support Weg mehr: https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/login/ Widget/LoginButton.Java die Methode ist privat und Sie können es nicht anrufen – Sierisimo

5

Ihre erste Lösung ist richtig. Es hat funktioniert nicht, weil Sie den Stil atrribute definiert haben:

style="@style/com_facebook_loginview_default_style" 

Vom LoginButton Quellcode:

public LoginButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    if (attrs.getStyleAttribute() == 0) { 
     do stuff ... 
    } 
} 

es so will, nur, wenn Sie mit dem definierten Attribut „login_text“ aussehen Lassen Sie das Attribut "Stil" undefiniert.

+1

Dies sollte die akzeptierte Lösung IMHO sein. Änderungen am SDK-Code sind NIE möglich. Das Entfernen des Style-Attributs, wie Gabriel darauf hinweist, reicht aus – kakoma

16

Gelöst !!

Add Zeichenfolge mit dem Namen "com_facebook_loginview_log_in_button" befindet sich auf strings.xml in res> Werte> strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="com_facebook_loginview_log_in_button">Connect</string> 
<string name="com_facebook_loginview_log_out_button">Your Logout</string> 
</resources> 
+0

Sie meinen, bearbeiten Sie diese Zeichenfolge, die in der Facebook-SDK-Projekt existieren ... –

+1

Nein, fügen Sie diese Zeichenfolge in Ihrem Projekt – sumitarora

+0

Nur eine, die funktioniert! –

0

Als Abkürzung können Sie den Login-Button Text direkt 4.0 im FB SDK in com ändern. facebook.login.widget.LoginButton Klassen-> setButtonText() -Methode

0

ich viele dieser Lösungen ausprobiert, aber nichts funktioniert, schließlich kam ich zu einem Ende mit:

Locale loc = Locale.FRENCH; 
loginButton = (LoginButton)findViewById(R.id.fb_login_button); 
loginButton.setTextLocale(loc); 

Dies ändert den Text in das von Ihnen eingestellte Gebietsschema und auch die Bestätigungsdialoge, zumindest was ich brauche.

Hoffe, das hilft.