Подтвердить что ты не робот

Facebook LoginButton для Android не принимает значения login_text и logout_text, переданные из XML

Facebook Sdk для Android не принимает значения login_text и logout_text, переданные из XML. Он просто игнорирует это. На земле отсутствует документация/пример, который использует эту настройку кнопки.

<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() и, следовательно, не может анализировать мои пользовательские параметры.

Кто-нибудь сталкивался с этой проблемой?

4b9b3361

Ответ 1

Габриэль находится на месте. Чтобы исправить это, перейдите в LoginButton.java в Facebook SDK и переместите вызов parseAttributes

parseAttributes(attrs)

чтобы он всегда выполнялся.

Весь метод будет выглядеть следующим образом:

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

    if (attrs.getStyleAttribute() == 0) {
            // apparently there 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. Прекрасно работает для меня.

Ответ 2

решаемые!!

Добавьте строку с именем "com_facebook_loginview_log_in_button" в файл strings.xml, расположенный в res > values > 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>

Ответ 3

Ваше первое решение правильно. Это не сработало, потому что вы определили стиль 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", если вы оставите атрибут "style" undefined.

Ответ 4

Мне просто пришлось изменить текст в источнике FacebookSDK.

Строка входа com_facebook_loginview_log_in_button находится в FacebookSDK/res/values/strings.xml

Ответ 5

В качестве ярлыка вы можете изменить текст кнопки входа непосредственно в FB SDK 4.0 в com.facebook.login.widget.LoginButton class- > setButtonText() method

Ответ 6

Я пробовал много из этих решений, но ничего не работает, наконец, я пришел к концу:

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

Это изменяет текст на установленный вами язык, а также на диалоги подтверждения, по крайней мере, на то, что мне нужно.

Надеюсь, что это поможет.