Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android facebook登录按钮定制_Android_Facebook_Facebook Login - Fatal编程技术网

Android facebook登录按钮定制

Android facebook登录按钮定制,android,facebook,facebook-login,Android,Facebook,Facebook Login,使用facebook sdk 4.6.0,我正在尝试在我的android应用程序中使用facebook登录集成。 com.facebook.login.widget.LoginButton显示以下按钮 我想将文本从“使用Facebook登录”更改为“仅使用Facebook” 我尝试了以前提供的几乎所有解决方案,但没有一个对我有效。我能想到的可能原因是,之前回答的所有问题都是针对facebook sdk 3.0的,而facebook sdk 4.6.0似乎失败了 我试过: 正在修改LoginBut

使用facebook sdk 4.6.0,我正在尝试在我的android应用程序中使用facebook登录集成。 com.facebook.login.widget.LoginButton显示以下按钮

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

我尝试了以前提供的几乎所有解决方案,但没有一个对我有效。我能想到的可能原因是,之前回答的所有问题都是针对facebook sdk 3.0的,而facebook sdk 4.6.0似乎失败了

我试过:

  • 正在修改LoginButton类,但该类已锁定

  • xmlns:facebook=”http://schemas.android.com/apk/res-auto“在LoginButton中使用此模式,并使用facbook:login_text=“login”更改文本”, facebook:com\u facebook\u login\u text=“login”但两者都无法工作

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

    这是我的登录按钮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文件已锁定


    我试图通过点击android studio右下角的锁定按钮解锁,但什么也没发生。任何关于如何解锁FB SDK文件的建议。我的FB SDK版本是4.6.0

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

    protected void configureButton(
            final Context context,
            final AttributeSet attrs,
            final int defStyleAttr,
            final int defStyleRes) {
        super.configureButton(context, attrs, defStyleAttr, defStyleRes);
        setInternalOnClickListener(new LoginClickListener());
    
        parseLoginButtonAttributes(context, attrs, defStyleAttr, defStyleRes);
    
        if (isInEditMode()) {
            // cannot use a drawable in edit mode, so setting the background color instead
            // of a background resource.
            setBackgroundColor(getResources().getColor(R.color.com_facebook_blue));
            // hardcoding in edit mode as getResources().getString() doesn't seem to work in
            // IntelliJ
            loginText = "Facebook";
        } else {
            accessTokenTracker = new AccessTokenTracker() {
                @Override
                protected void onCurrentAccessTokenChanged(
                        AccessToken oldAccessToken,
                        AccessToken currentAccessToken) {
                    setButtonText();
                }
            };
        }
    
        setButtonText();
    }
    

    在搜索了很多之后,我发现了最近的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>
    
    我只需要用户的公共档案和电子邮件

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

    我使用日志查找facebook登录的请求代码是64206

    我试过了,但LoginButton.java类被锁定。我不能编辑它。请告诉我如何解锁。转到Facebook sdk java文件夹,打开LoginButton.java类并更改setButtonText();方法。如果尚未找到,请查看此方法
    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
    
    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);
        }
    }