自定义Android Facebook登录按钮

dor*_*ora 76 android android-facebook

我想自定义Facebook登录按钮的外观,我们与Facebook sdk for android(facebook-android-sdk-3.0.1)相处.我想要一个简单的android按钮,其标题为"通过Facebook登录".我找不到任何关于这方面的文件.

因此,如果有人知道如何以简单的方式做到这一点,请告诉我或指导我如何做到这一点.

Tej*_*oid 158

为了拥有完全自定义的facebook登录按钮而不使用com.facebook.widget.LoginButton.

根据facebook sdk 4.x,

有来自facebook的新登录概念

LoginManager和AccessToken - 这些新类执行Facebook登录

所以,现在您可以在没有Facebook登录按钮的情况下访问Facebook身份验证

layout.xml

    <Button
            android:id="@+id/btn_fb_login"
            .../>
Run Code Online (Sandbox Code Playgroud)

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); 
}
Run Code Online (Sandbox Code Playgroud)

  • 错误:logInWithReadPermissions(this,Arrays.asList("public_profile","user_friends")); 无法解析符号 (6认同)
  • @ShaktisinhJadeja这是指OnClickListener上下文.logInWithReadPermissions需要一个活动或片段作为第一个参数.所以把YourActivityName.this或YourFragmentName.this代替. (3认同)

小智 82

您可以使用样式来修改登录按钮

<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>
Run Code Online (Sandbox Code Playgroud)

并在布局中

<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"/>
Run Code Online (Sandbox Code Playgroud)

  • 它不再起作用了.Gradle在构建时停止并出错.使用LoginManager和标准按钮. (13认同)

And*_*nik 34

我发现这样做的最好方法是,如果你想完全自定义按钮,那就是创建一个按钮,或者你想要的任何视图(在我的情况下它是一个LinearLayout)并设置一个OnClickListener到该视图,并调用以下内容onClick事件:

com.facebook.login.widget.LoginButton btn = new LoginButton(this);
btn.performClick();
Run Code Online (Sandbox Code Playgroud)

  • 有用。但是没有必要。无需使用Facebook登录按钮即可伪造其点击。请改用LoginManager。 (2认同)

小智 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="" />
Run Code Online (Sandbox Code Playgroud)

在代码中我定义了后台资源:

final LoginButton button = (LoginButton) findViewById(R.id.login_button);
button.setBackgroundResource(R.drawable.facebook);
Run Code Online (Sandbox Code Playgroud)

  • facebook SDK 3.0或更高版本的facebook:login_text =""facebook:logout_text ="" (3认同)

小智 12

  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>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将监听器添加到假按钮并模拟单击:

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


Par*_*hta 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=""/>
Run Code Online (Sandbox Code Playgroud)


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

    }
Run Code Online (Sandbox Code Playgroud)