facebook登录按钮自定义

时间:2016-01-16 11:21:12

标签: android facebook facebook-login

使用facebook sdk 4.6.0我试图在我的Android应用程序中使用facebook登录集成。 com.facebook.login.widget.LoginButton显示以下按钮enter image description here

我想将文字从“使用Facebook登录”更改为“仅限FACEBOOK”

我已经尝试了之前提供的几乎所有解决方案,但它们都没有为我工作。我能想到的可能原因是所有以前回答的问题都是针对facebook sdk 3.0,这对于facebook sdk 4.6.0来说似乎失败了

我试过了:

  1. 修改LoginButton类但它已被锁定

  2. xmlns:facebook =“http://schemas.android.com/apk/res-auto”在LoginButton中使用此架构并使用facbook更改文本:login_text =“LOGIN”, facebook:com_facebook_login_text =“登录”但两个都​​无法正常工作

  3. 这是我对facebook sdk的依赖 编译'com.facebook.android:facebook-android-sdk:4.6.0'

    这是我的LoginButton xml

    <com.facebook.login.widget.LoginButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/buttonRegisterFacebook"
        android:padding="10dp"
       />
    

    请建议一些更改文字和更改fb徽标图片尺寸的方法

    编辑:现在我明白为什么以前说过的方法都不适用于我。我的Facebook SDK文件被锁定

    LoginButton.java file is locked

    我尝试通过点击Android工作室右下角的锁定按钮解锁,但没有任何反应。有关如何解锁FB SDK文件的任何建议。我的FB SDK版本是4.6.0

2 个答案:

答案 0 :(得分:0)

请在facebook SDK的LoginButton.java类的代码中更改

function save() {
  var data = $('#formId').serialize();
  var url = 'test1.php';
  $.post(url, data, function (response) {
    //----------this is new part------
    $.getJSON("test.php", function(result) {
      $.each(result, function(i, field) {
        $("#reza").append(field.name);
      });    
    });
  });
} 

答案 1 :(得分:0)

经过大量搜索,我发现最近的Facebook SDK 4.6.0,为了只更改FB登录按钮文本,将其添加到res / values / strings.xml

<string name="com_facebook_loginview_log_out_button">Your Logout Text</string>
<string name="com_facebook_loginview_log_in_button_long">Your Login Text</string>

但是,如果我们想在任何随机按钮中使用FB登录按钮功能

将以下行添加到随机按钮的ClickListener(在我的情况下为'buttonLogin')

buttonLogin.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           LoginButton loginButton = new LoginButton(Login.this);
           AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
               @Override
               protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
                   updateWithToken(newAccessToken);
               }
           };

           CallbackManager callbackManager = CallbackManager.Factory.create();
           loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));
           loginButton.registerCallback(callbackManager, callback);
           loginButton.performClick();
}

我只需要用户公开个人资料和电子邮件

updateWithToken()为

private void updateWithToken( AccessToken currentAccessToken ){
    if(currentAccessToken!=null){
        Log.v("MyApp", getClass().toString() + "updateWithToken:If(Token NonNull)");

        GraphRequest request = GraphRequest.newMeRequest(currentAccessToken, new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject object, GraphResponse response) {
                Log.v("MyApp",getClass().toString() + response.toString());
                // Get facebook data from login
                try {
                    Log.v("MyApp", getClass().toString() + object.toString()); // contains data string
                } catch (JSONException e) {
                    Log.v("MyApp", getClass().toString() + "LoginJSON");
                    e.printStackTrace();
                }
                Intent intent = new Intent(Login.this, Home.class); // once data is received i wanted to open Home Activity
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                finish();
            }
        });

        Bundle parameters = new Bundle();
        parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location");
        request.setParameters(parameters);
        request.executeAsync();
    } else {
        Log.v("MyApp", getClass().toString() + "updateWithToken:Else(Token Null)");
    }
}//updatewithtoken

还将OnActivityResult重写为

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.v("MyApp", getClass().toString() + " Request:" + requestCode + " Result:" + resultCode);
    if (requestCode==64206) {
        Log.v("MyApp", getClass().toString() + " onActivityResult:If Facebook");
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}

我使用日志查找请求代码是64206 for facebook login。