13

适用于 Android 的 Facebook Sdk 不采用从 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() 的任何构造函数,因此无法解析我的自定义参数。

有人遇到过这个问题吗?

4

6 回答 6

16

解决了!!

将名称为“com_facebook_loginview_log_in_button”的字符串添加到位于 res>values>strings.xml 中的 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>
于 2014-03-04T07:51:32.223 回答
5

您的第一个解决方案是正确的。它没有用,因为您已经定义了样式属性:

style="@style/com_facebook_loginview_default_style"

从 LoginButton 源代码:

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

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

因此,如果您未定义“style”属性,它只会查看已定义的属性“login_text”。

于 2013-03-14T19:03:50.623 回答
2

加布里埃尔在现场。要解决此问题,请转到 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);
}

style 和 login_text 现在都在考虑之中。对我来说很好。

于 2013-05-24T09:44:59.590 回答
1

我最终只需要更改 FacebookSDK 源代码中的文本。

登录字符串com_facebook_loginview_log_in_button位于FacebookSDK/res/values/strings.xml

于 2013-02-28T21:46:32.727 回答
0

作为快捷方式,您可以直接在 FB SDK 4.0 中的 com.facebook.login.widget.LoginButton class->setButtonText() 方法中更改登录按钮文本

于 2015-04-03T17:28:39.223 回答
0

我尝试了许多这些解决方案,但没有任何效果,最后我以:

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

这会将文本更改为您设置的语言环境以及确认对话框,至少是我需要的。

希望这可以帮助。

于 2015-07-03T11:58:33.720 回答