tùy chỉnh nút Đăng nhập Facebook trên Android


79

Tôi muốn tùy chỉnh giao diện của nút đăng nhập Facebook mà chúng tôi có cùng với sdk Facebook dành cho android (facebook-android-sdk-3.0.1). Tôi muốn một nút android đơn giản có tiêu đề "Đăng nhập qua Facebook". Tôi không thể tìm thấy bất kỳ tài liệu nào liên quan đến điều đó.

Vì vậy, nếu ai biết làm thế nào để làm điều đó một cách đơn giản, xin vui lòng cho tôi biết hoặc chỉ dẫn tôi cách làm.


1
Tôi chưa bao giờ sử dụng sdk facebook ... nhưng nếu của họ là một tệp hình ảnh được gắn với nút đăng nhập, bạn chỉ có thể sửa đổi điều đó ... nếu không hoàn toàn bỏ qua nhận xét của tôi
brendosthoughts

nó không chỉ là một nút liên kết tệp hình ảnh. nó có rất nhiều chức năng liên quan đến nó, ví dụ: nó thay đổi văn bản của nó dựa trên người dùng có đăng nhập hay không
dora

Câu trả lời:


83

Bạn có thể sử dụng các kiểu để sửa đổi nút đăng nhập như thế này

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

và trong bố cục

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

Xin chào @Filsh, Có tài liệu chính thức nào về các thuộc tính này không? Tôi đã không tìm thấy nó.
Jorge E. Hernández

16
Nó không hoạt động nữa. Gradle tạm dừng khi có lỗi khi xây dựng. Sử dụng LoginManager và một nút tiêu chuẩn.
Cassio Landim

Cái này là hoàn hảo. Tuyệt vời
VVB

168

Để có nút đăng nhập facebook hoàn toàn tùy chỉnh mà không cần sử dụng com.facebook.widget.LoginButton.

Theo facebook sdk 4.x,

Có khái niệm mới về đăng nhập từ facebook

LoginManager và AccessToken - Các lớp mới này thực hiện Đăng nhập Facebook

Vì vậy, Bây giờ bạn có thể truy cập xác thực Facebook mà không cần nút đăng nhập Facebook như

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
Lỗi: logInWithReadPermissions (this, Arrays.asList ("public_profile", "user_friends")); Không thể phân giải biểu tượng
Shaktisinh Jadeja

1
TejaDroid trả lời rất hay, bạn nên thêm onActivityResult để đưa ra câu trả lời hay nhất. :)
Ilario

1
Làm việc như một sự quyến rũ +1
Arpit Patel

3
@ShaktisinhJadeja điều này đề cập đến ngữ cảnh OnClickListener. logInWithReadPermissions cần một hoạt động hoặc phân đoạn làm tham số đầu tiên. Vì vậy, hãy đặt YourActivityName.this hoặc YourFragmentName.this để thay thế.
crubio

1
Câu trả lời này đang hoạt động tốt. Có ai có thể cho tôi biết sau khi đăng nhập làm thế nào để đăng xuất khỏi facebook trong ứng dụng Android không?
BABU K

36

Cách tốt nhất mà tôi đã tìm thấy để làm điều này, nếu bạn muốn tùy chỉnh hoàn toàn nút là tạo một nút hoặc bất kỳ Chế độ xem nào bạn muốn (trong trường hợp của tôi là a LinearLayout) và đặt một OnClickListenerchế độ xem đó và gọi như sau trong sự kiện onClick:

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

2
Nó hoạt động. Nhưng không cần thiết. Không cần phải sử dụng Nút đăng nhập Facebook và giả mạo lần nhấp của nó. Sử dụng LoginManager thay thế.
Vitor Hugo Schwaab

1
Vitor đã đúng, dễ dàng hơn nhiều để tùy chỉnh nút của riêng bạn và sử dụng Trình quản lý đăng nhập
Jonathan Dunn

16

Bạn có thể sửa đổi nút đăng nhập như thế này

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

Và trong mã, tôi đã xác định tài nguyên nền:

final LoginButton button = (LoginButton) findViewById(R.id.login_button);
button.setBackgroundResource(R.drawable.facebook);

1
Xin chào @RINK, fb:login_textfb:logout_textgặp lỗi khi cố gắng chạy. Dưới đây là các lỗi: Error parsing XML: unbound prefix. Bạn có chắc đó là cú pháp thích hợp?
toobsco42

1
Rõ ràng là đã muộn, nhưng @ toobsco42 - hãy đảm bảo rằng bạn đã xác định xmlns: fb (thành schemas.android.com/apk/res-auto ), trong nút như được hiển thị ở đây hoặc ở cấp cao nhất của tệp bố cục của bạn.
Eric Brynsvold

3
facebook SDK 3.0 trở lên facebook của nó: login_text = "" facebook: logout_text = ""
Dhaval Parmar

1
@RINK cũng viết điều này thì bạn sẽ không gặp lỗi này xmlns: fb = " schemas.android.com/apk/res-auto "
Yawar

Button.setCompoundDrawablesWithIntrinsicBounds (0,0,0,0); , Viết những dòng này quá liên kết
Yawar

15
  1. Tạo nút facebook tùy chỉnh và thay đổi khả năng hiển thị trên nút facebook gốc:

    <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. Thêm trình nghe vào nút giả của bạn và mô phỏng nhấp chuột:

    facebookView.setOnClickListener(this);
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.facebookView){
           facebookButton.performClick();
        }
    }
    

Đây là thứ tốt nhất. Một câu trả lời đúng.
paakjis

9

Trong SDK Facebook mới hơn, tên văn bản đăng nhập và đăng xuất là:

 <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
Nó hoạt động, làm thế nào bạn tìm ra? đào sâu vào mã 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=""
            />

Điều này đã làm việc cho tôi. Để thay đổi văn bản nút đăng nhập facebook.


1

Tùy chỉnh com.facebook.widget.LoginButton

bước: 1 Tạo Framelayout.

bước: 2 Để đặt com.facebook.widget.LoginButton

bước: 3 Để đặt Textview có thể tùy chỉnh.

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

PHẢI NHỚ

1> com.facebook.widget.LoginButton & TextView Chiều cao / Chiều rộng Giống nhau

2> Đầu tiên phân tách com.facebook.widget.LoginButton rồi đến TextView

3> Để thực hiện đăng nhập / đăng xuất bằng Trình nghe nhấp chuột của TextView


1

Đó là một thủ thuật không phải là một phương pháp thích hợp.

  • Tạo một bố cục tương đối.
  • Xác định facebook_botton của bạn.
  • Đồng thời xác định nút thiết kế tùy chỉnh của bạn.
  • Chồng chéo chúng.
<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

Điều này rất đơn giản. Thêm một nút trong tệp bố cục như

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

Và trong onClick đặt phương thức registerercallback () của LoginManager Trở thành phương thức này tự động thực thi.

  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>

Cách dễ nhất để tùy chỉnh nút facebook tích hợp cho cả java và kotlin


Câu trả lời khéo léo
Sayok Majumder

-1

Cách thích hợp và sạch sẽ nhất

Sau khi kiểm tra các câu trả lời bên dưới, có vẻ như chúng là loại hack dựa vào việc chỉnh sửa chế độ xem nút đăng nhập để phù hợp hơn với nhu cầu của bạn.

Hình ảnh demo

Cũng ở vị trí tương tự, tôi đã thành công trong việc tùy chỉnh nút đăng nhập facebook hiệu quả.

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

và triển khai onClickListener như vậy

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

Bạn có thể tìm thấy toàn bộ mã nguồn trên: http://medyo.github.io/customize-the-android-facebook-login-on-android


Cần nút chính thức alter, không thêm nút riêng của bạn
Shadab K
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.