настроить кнопку входа в Facebook на Android

79

Я хочу настроить внешний вид кнопки входа в Facebook, которую мы получаем вместе с sdk Facebook для Android (facebook-android-sdk-3.0.1). Мне нужна простая кнопка для Android с названием «Войти через Facebook». Я не смог найти никакой документации по этому поводу.

Так что, если кто-нибудь знает, как это сделать простым способом, пожалуйста, скажите мне или дайте мне указания, как это сделать.

Дора
источник
1
Я никогда не использовал facebook sdk ... но если это файл изображения, связанный с кнопкой входа в систему, вы можете просто изменить его ... если не полностью игнорировать мой комментарий
brendosthoughts
это просто не кнопка, связанная с файлом изображения. у него много функций, связанных с ним, например: он меняет свой текст в зависимости от того, вошел ли пользователь в систему или нет
Дора

Ответы:

83

Вы можете использовать стили для модификации кнопки входа в систему следующим образом

<style name="FacebookLoginButton">
    <item name="android:textSize">@dimen/smallTxtSize</item>
    <item name="android:background">@drawable/facebook_signin_btn</item>
    <item name="android:layout_marginTop">10dp</item>
    <item name="android:layout_marginBottom">10dp</item>
    <item name="android:layout_gravity">center_horizontal</item>
</style>

и в макете

<com.facebook.widget.LoginButton
        xmlns:fb="http://schemas.android.com/apk/res-auto"
        android:id="@+id/loginFacebookButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        fb:login_text="@string/loginFacebookButton"
        fb:logout_text=""
        style="@style/FacebookLoginButton"/>
Filsh
источник
Привет @Filsh! Есть ли официальная документация по этим свойствам? Я не нашел.
Хорхе Э. Эрнандес,
16
Больше не работает. Gradle останавливается с ошибкой при сборке. Используйте LoginManager и стандартную кнопку.
Кассио Ландим,
Этот идеален. Отлично
VVB
168

Чтобы иметь полностью настраиваемую кнопку входа в facebook без использования com.facebook.widget.LoginButton.

Согласно facebook sdk 4.x,

Появилась новая концепция входа в систему как из facebook

LoginManager и AccessToken - эти новые классы выполняют вход в Facebook

Итак, теперь вы можете получить доступ к аутентификации Facebook без кнопки входа в Facebook как

layout.xml

    <Button
            android:id="@+id/btn_fb_login"
            .../>

MainActivity.java

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        FacebookSdk.sdkInitialize(this.getApplicationContext());

        callbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Log.d("Success", "Login");

                    }

                    @Override
                    public void onCancel() {
                        Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });

        setContentView(R.layout.activity_main);

        Button btn_fb_login = (Button)findViewById(R.id.btn_fb_login);

        btn_fb_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                  LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends"));
            }
        });

    }

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    callbackManager.onActivityResult(requestCode, resultCode, data); 
}
TejaDroid
источник
6
Ошибка: logInWithReadPermissions (this, Arrays.asList ("public_profile", "user_friends")); Не могу разрешить символ
Шактисин Джадеджа
1
TejaDroid хороший ответ, imho вы должны добавить onActivityResult, чтобы дать лучший ответ. :)
Иларио
1
Работай как шарм +1
Арпит Патель
3
@ShaktisinhJadeja это относится к контексту OnClickListener. logInWithReadPermissions требует действия или фрагмента в качестве первого параметра. Поэтому вместо этого поместите YourActivityName.this или YourFragmentName.this.
crubio
1
Этот ответ работает нормально. Может ли кто-нибудь сказать мне после входа в систему, как выйти из Facebook в приложении для Android?
BABU K
36

Лучший способ, который я нашел для этого, если вы хотите полностью настроить кнопку, - это создать кнопку или любое желаемое представление (в моем случае это был а LinearLayout), установить OnClickListenerдля этого представления и вызвать следующее в onClick событие:

com.facebook.login.widget.LoginButton btn = new LoginButton(this);
btn.performClick();
Андраник
источник
2
Оно работает. Но ненужно. Нет необходимости использовать кнопку входа в Facebook и имитировать ее нажатие. Вместо этого используйте LoginManager.
Vitor Hugo Schwaab 08
1
Витор прав, гораздо проще настроить собственную кнопку и использовать менеджер входа в систему
Джонатан Данн
16

Вы можете изменить кнопку входа в систему следующим образом

<com.facebook.widget.LoginButton
            xmlns:fb="http://schemas.android.com/apk/res-auto"
            android:id="@+id/login_button"
            android:layout_width="249dp"
            android:layout_height="45dp"
            android:layout_above="@+id/textView1"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="30dp"
            android:layout_marginTop="30dp"
            android:contentDescription="@string/login_desc"
            android:scaleType="centerInside"
            fb:login_text=""
            fb:logout_text="" />

И в коде я определил фоновый ресурс:

final LoginButton button = (LoginButton) findViewById(R.id.login_button);
button.setBackgroundResource(R.drawable.facebook);
КАТОК
источник
1
Привет @RINK, fb:login_textи выдает fb:logout_textошибку при попытке запустить. Здесь ошибка: Error parsing XML: unbound prefix. Вы уверены, что это правильный синтаксис?
toobsco42
1
Очевидно, поздно, но @ toobsco42 - убедитесь, что у вас определен xmlns: fb (на schemas.android.com/apk/res-auto ) либо на кнопке, как показано здесь, либо на верхнем уровне файла макета.
Эрик Бринсволд,
3
facebook SDK 3.0 или более поздней версии facebook: login_text = "" facebook: logout_text = ""
Дхавал Пармар
1
@RINK напишите это тоже, тогда вы не получите эту ошибку xmlns: fb = " schemas.android.com/apk/res-auto "
Yawar
Button.setCompoundDrawablesWithIntrinsicBounds (0,0,0,0); , напишите и эту ссылку
Yawar
15
  1. Создайте пользовательскую кнопку facebook и измените видимость встроенной кнопки facebook:

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
        <Button
                android:id="@+id/facebookView"
                android:layout_width="300dp"
                android:layout_height="48dp"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="12dp"
                android:background="@drawable/btn_frame"
                android:gravity="center"
                android:text="@string/Sign_in_facebook_button"
                android:textColor="@color/colorAccent" />
    
        <com.facebook.login.widget.LoginButton
                android:id="@+id/facebookButton"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:visibility="invisible"
                android:layout_marginBottom="12dp" />
    
     </LinearLayout>
    
  2. Добавьте слушателя к своей фальшивой кнопке и имитируйте щелчок:

    facebookView.setOnClickListener(this);
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.facebookView){
           facebookButton.performClick();
        }
    }
    
Денис Федак
источник
Это лучшее. Один верный ответ.
paakjis
9

В более новой версии Facebook SDK текстовое имя входа и выхода:

 <com.facebook.login.widget.LoginButton
 xmlns:facebook="http://schemas.android.com/apk/res-auto"
 facebook:com_facebook_login_text=""
 facebook:com_facebook_logout_text=""/>
Parth Mehta
источник
1
Работает, как разобрались? копаться в коде SDK?
Hassan Tareq
5
//call Facebook onclick on your customized button on click by the following

FacebookSdk.sdkInitialize(this.getApplicationContext());

        callbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Log.d("Success", "Login");

                    }

                    @Override
                    public void onCancel() {
                        Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });

        setContentView(R.layout.activity_main);

        Button mycustomizeedbutton=(Button)findViewById(R.id.mycustomizeedbutton);

        mycustomizeedbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                  LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
            }
        });

    }
Атиш Наик
источник
2
 <com.facebook.widget.LoginButton
            android:id="@+id/login_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            facebook:confirm_logout="false"
            facebook:fetch_user_info="true"
            android:text="testing 123"
            facebook:login_text=""
            facebook:logout_text=""
            />

Это сработало для меня. Чтобы изменить текст кнопки входа в facebook.

Танка
источник
1

Настройте com.facebook.widget.LoginButton

шаг: 1 Создание раскладки фрейма.

шаг: 2 Чтобы установить com.facebook.widget.LoginButton

шаг: 3 Чтобы установить Textview с настраиваемым.

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <com.facebook.widget.LoginButton
        android:id="@+id/fbLogin"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:contentDescription="@string/app_name"
        facebook:confirm_logout="false"
        facebook:fetch_user_info="true"
        facebook:login_text=""
        facebook:logout_text="" />

    <TextView
        android:id="@+id/tv_radio_setting_login"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_centerHorizontal="true"
        android:background="@drawable/drawable_radio_setting_loginbtn"
        android:gravity="center"
        android:padding="10dp"
        android:textColor="@android:color/white"
        android:textSize="18sp" />
</FrameLayout>

НЕОБХОДИМО ПОМНИТЬ

1> com.facebook.widget.LoginButton и TextView Высота / ширина одинаковы

2> 1-й объявить com.facebook.widget.LoginButton, затем TextView

3> Чтобы выполнить вход / выход из системы с помощью прослушивателя щелчков TextView

Дхрув Раваль
источник
1

Это уловка, а не правильный метод.

  • Создайте относительный макет.
  • Определите свой facebook_botton.
  • Также определите кнопку нестандартного дизайна.
  • Перекрыть их.
<RelativeLayout android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp">
    <com.facebook.login.widget.LoginButton
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    android:id="@+id/login_button"
    android:layout_width="300dp"
    android:layout_height="100dp"
    android:paddingTop="15dp"
    android:paddingBottom="15dp" />
    <LinearLayout
    android:id="@+id/llfbSignup"
    android:layout_width="300dp"
    android:layout_height="50dp"
    android:background="@drawable/facebook"
    android:layout_gravity="center_horizontal"
    android:orientation="horizontal">
    <ImageView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:src="@drawable/facbk"
    android:layout_gravity="center_vertical"
    android:layout_marginLeft="10dp" />
    <View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:background="@color/fullGray"
    android:layout_marginLeft="10dp"/>
    <com.yadav.bookedup.fonts.GoutamBold
    android:layout_width="240dp"
    android:layout_height="50dp"
    android:text="Sign Up via Facebook"
    android:gravity="center"
    android:textColor="@color/white"
    android:textSize="18dp"
    android:layout_gravity="center_vertical"
    android:layout_marginLeft="10dp"/>
    </LinearLayout>
</RelativeLayout>
АМИТ ЯДАВ
источник
1

Это очень просто. Добавьте кнопку в файл макета, например

<Button
   android:layout_width="200dp"
   android:layout_height="wrap_content"
   android:text="Login with facebook"
   android:textColor="#ffff"
   android:layout_gravity="center"
   android:textStyle="bold"
   android:onClick="fbLogin"
   android:background="@color/colorPrimary"/>

И в onClick поместите метод registercallback () LoginManager, потому что этот метод выполняется автоматически.

  public void fbLogin(View view)
{
    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("user_photos", "email", "public_profile", "user_posts" , "AccessToken"));
    LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions"));
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>()
            {
                @Override
                public void onSuccess(LoginResult loginResult)
                {
                    // App code
                }

                @Override
                public void onCancel()
                {
                    // App code
                }

                @Override
                public void onError(FacebookException exception)
                {
                    // App code
                }
            });
}
Харприт Сингх
источник
1
<FrameLayout
    android:id="@+id/FrameLayout1"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_marginStart="132dp"
    android:layout_marginTop="12dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/logbu">


    <ImageView
        android:id="@+id/fb"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/fb"
        android:onClick="onClickFacebookButton"
        android:textAllCaps="false"
        android:textColor="#ffffff"
        android:textSize="22sp" />

    <com.facebook.login.widget.LoginButton

        android:alpha="0"  <!--***SOLUTION***-->
        android:id="@+id/buttonFacebookLogin"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="45sp"
        android:visibility="visible"
        app:com_facebook_login_text="Log in with Facebook" />

</FrameLayout>

Самый простой способ настроить встроенную кнопку facebook как для java, так и для kotlin

Эйуш Мишра
источник
Гениальный ответ
Sayok Majumder
-1

Правильный и самый чистый способ

После проверки ответов ниже кажется, что это своего рода хаки, которые основываются на редактировании представления кнопки входа в систему, чтобы сделать его более подходящим для ваших нужд.

Демо-образ

Находясь в том же положении, мне удалось эффективно настроить кнопку входа в facebook.

<mehdi.sakout.fancybuttons.FancyButton
   android:id="@+id/facebook_login"
   android:layout_width="wrap_content"
   android:layout_height="45dp"
   android:paddingLeft="10dp"
   android:paddingRight="10dp"
   app:fb_radius="2dp"
   app:fb_iconPosition="left"
   app:fb_fontIconSize="20sp"
   app:fb_iconPaddingRight="10dp"
   app:fb_textSize="16sp"
   app:fb_text="Facebook Connect"
   app:fb_textColor="#ffffff"
   app:fb_defaultColor="#39579B"
   app:fb_focusColor="#6183d2"
   app:fb_fontIconResource="&#xf230;"
   android:layout_centerVertical="true"
   android:layout_centerHorizontal="true" />

и реализуем onClickListener так

FacebookLogin.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
      if (AccessToken.getCurrentAccessToken() != null){
         mLoginManager.logOut();
      } else {
         mAccessTokenTracker.startTracking();
         mLoginManager.logInWithReadPermissions(MainActivity.this,              Arrays.asList("public_profile"));
      }
   }
});

Вы можете найти весь исходный код на: http://medyo.github.io/customize-the-android-facebook-login-on-android

Мехди Сакут
источник
Необходимо изменить официальную кнопку, а не добавлять свою собственную кнопку
Shadab K