2013-02-25 1 views
13

Android用Facebook Sdkは、XMLから渡されたlogin_text値とlogout_text値を受け取りません。それはただそれを無視します。このボタンのカスタマイズを使用する地球上で利用可能なドキュメンテーション/例はありません。Android用Facebook LoginButtonは、XMLから渡されたlogin_text値とlogout_text値を受け取りません

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

常にログインまたはログアウトと表示されます。このプロパティはどのように使用できますか? LoginButtonコードを使ってデバッグしようとしましたが、無駄でした。これは決してLoginButton()のコンストラクタを通過することはなく、したがって私のカスタムパラメータを解析することはできません。

誰かがこの問題に直面しましたか?

答えて

3

ガブリエルが点在しています。この問題を解決するには、FacebookのSDKにLoginButton.javaに移動し、それが常に実行されるようにparseAttributesが下へ

parseAttributes(attrs) 

を呼び出して移動します。

全体の方法は、次のようになります。

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); 
} 

スタイルとlogin_textの両方は、現在検討中で撮影しています。私のためにうまく動作します。

1

私は、FacebookSDKソースのテキストを変更するだけでした。

ログイン文字列は、あなたの最初のソリューションが正しいFacebookSDK/res/values/strings.xml

+0

なぜこの方法でハックするのですか?テキストを変更するには、サポートされている方法があります。 – greg7gkb

+0

アンドロイドスタジオを使ってこのレベルのコントロールにさよならを言うなら、 –

+0

もうサポートセットの方法はありません:https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/login/ウィジェット/ LoginButton。javaメソッドはプライベートで、あなたはそれを呼び出すことはできません – Sierisimo

5

com_facebook_loginview_log_in_buttonに位置しています。あなたがスタイルatrributeを定義したので、それが働いていなかった :

style="@style/com_facebook_loginview_default_style" 

LoginButtonのソースコードから:

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

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

だから場合は、それだけで定義された属性「login_text」を見ていきます「スタイル」属性は未定義のままにします。

+1

これは受け入れられた解決策IMHOでなければなりません。 SDKコードを変更することは決して選択肢にはなりません。スタイル属性を削除すると、Gabrielが指摘しているように、 – kakoma

16

解決済み!名前「com_facebook_loginview_log_in_button」と

追加文字列をショートカットとしての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

という文字列はfacebook-sdkプロジェクトに存在するこの文字列を編集することを意味します。 –

+1

いいえ、この文字列をプロジェクトに追加してください – sumitarora

+0

これは1つだけです! –

0

>解像度>の値に位置のstrings.xmlするには、COMにFB SDK 4.0に直接ログインボタンのテキストを変更することができます。 facebook.login.widget.LoginButtonクラス - > setButtonText()メソッド

0

私は、これらのソリューションの多くを試してみましたが、何も働かない、最終的には私が最後に来た:

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

これは、あなたが設定したロケールと、少なくとも私が必要とする確認ダイアログをテキストに変更します。

これが役に立ちます。

関連する問題