Android Facebook 로그인 버튼 사용자 지정


79

Android 용 Facebook SDK (facebook-android-sdk-3.0.1)와 함께 제공되는 Facebook 로그인 버튼의 모양을 사용자 지정하고 싶습니다. "페이스 북을 통해 로그인"이라는 제목의 간단한 안드로이드 버튼을 원합니다. 이에 관한 문서를 찾을 수 없습니다.

그래서 누구든지 간단한 방법으로하는 방법을 알고 있다면, 저에게 알려주거나 방법을 알려주세요.


1
나는 facebook sdk를 사용한 적이 없다. 그러나 그들이 로그인 버튼과 관련된 이미지 파일이라면 당신은 그것을 수정할 수있다. 내 코멘트를 완전히 무시하지 않는다면
brendosthoughts

이미지 파일 관련 버튼이 아닙니다. 예 : 사용자가 로그인했는지 여부에 따라 텍스트를 변경합니다.
dora

답변:


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, 이러한 속성에 대한 공식 문서가 있습니까? 나는 그것을 찾지 못했다.
호르헤 E. 에르난데스

16
더 이상 작동하지 않습니다. 빌드 할 때 Gradle이 오류와 함께 중지됩니다. LoginManager 및 표준 버튼을 사용합니다.
Cassio Landim 2015-06-07

이것은 완벽합니다. Great
VVB 2015

168

를 사용하지 않고 완전히 사용자 정의 페이스 북 로그인 버튼을 갖기 위해 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); 
}

6
오류 : logInWithReadPermissions (this, Arrays.asList ( "public_profile", "user_friends")); 기호를 해결할 수 없습니다
Shaktisinh Jadeja

1
TejaDroid 좋은 대답, imho 당신은 최선의 대답을 제공하기 위해 onActivityResult를 추가해야합니다. :)
Ilario

1
매력처럼 작동 +1
Arpit Patel 2016

3
@ShaktisinhJadeja 이것은 OnClickListener 컨텍스트를 나타냅니다. logInWithReadPermissions는 첫 번째 매개 변수로 활동 또는 단편이 필요합니다. 따라서 YourActivityName.this 또는 YourFragmentName.this를 대신 넣으십시오.
crubio

1
이 대답은 잘 작동합니다. 로그인 후 Android 앱에서 Facebook에서 로그 아웃하는 방법을 알려주는 사람이 있습니까?
BABU K

36

이 작업을 수행하는 가장 좋은 방법은 단추를 완전히 사용자 지정하려는 경우 단추 또는 원하는보기 (내 경우에는 LinearLayout)를 만들고 OnClickListener해당보기에 대해 설정 하고 다음을 호출하는 것입니다. onClick 이벤트 :

com.facebook.login.widget.LoginButton btn = new LoginButton(this);
btn.performClick();

2
효과가있다. 그러나 불필요합니다. Facebook 로그인 버튼을 사용하여 가짜 클릭을 할 필요가 없습니다. 대신 LoginManager를 사용하십시오.
Vitor Hugo Schwaab 2011

1
Vitor가 맞습니다. 버튼을 사용자 정의하고 로그인 관리자를 사용하는 것이 훨씬 더 쉽습니다.
Jonathan Dunn

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_textfb:logout_text실행하려고 할 때 오류가 발생. 다음은 오류 Error parsing XML: unbound prefix입니다.. 올바른 구문입니까?
toobsco42

1
분명히 늦었지만 @ toobsco42- 여기에 표시된 버튼 또는 레이아웃 파일의 최상위 수준에서 xmlns : fb가 정의되어 있는지 확인하십시오 ( schemas.android.com/apk/res-auto로 ).
Eric Brynsvold 2013 년

3
facebook SDK 3.0 이상 facebook : login_text = ""facebook : logout_text = ""
Dhaval Parmar

1
FB = "@RINK 다음이 오류의 xmlns받지 않습니다이 쓰기 schemas.android.com/apk/res-auto "
야와 르

Button.setCompoundDrawablesWithIntrinsicBounds (0,0,0,0); 이 너무 쓰기 링크
야와 르

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

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

이것은 나를 위해 일했습니다. 페이스 북 로그인 버튼 텍스트를 변경하려면.


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 declate com.facebook.widget.LoginButton 다음 텍스트 뷰

3> TextView의 Click-Listener를 사용하여 로그인 / 로그 아웃하려면


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에서 LoginManager의 registercallback () 메서드를 배치합니다.이 메서드가 자동으로 실행되기 때문입니다.

  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>

Java 및 Kotlin 모두에 대해 통합 된 Facebook 버튼을 사용자 정의하는 가장 쉬운 방법


독창적 인 답
Sayok Majumder

-1

적절하고 깨끗한 방법

아래 답변을 확인한 후 로그인 버튼보기를 편집하여 필요에 더 적합하게 만드는 일종의 해킹 인 것 같습니다.

데모 이미지

같은 위치에 있기 때문에 페이스 북 로그인 버튼을 효율적으로 커스터마이즈하는 데 성공했습니다.

<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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.