Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 Android Sdk - Fatal编程技术网

Android Facebook登录按钮:应用自定义样式

Android Facebook登录按钮:应用自定义样式,android,facebook,facebook-android-sdk,Android,Facebook,Facebook Android Sdk,我在使用新的Facebook android sdk 4时遇到了一个奇怪的问题。 对于我使用的旧sdk版本: <com.facebook.login.widget.LoginButton xmlns:fb="http://schemas.android.com/apk/res-auto" android:id="@+id/fb_button" style="@style/FacebookLoginButton" android:layout_width="

我在使用新的Facebook android sdk 4时遇到了一个奇怪的问题。 对于我使用的旧sdk版本:

 <com.facebook.login.widget.LoginButton
    xmlns:fb="http://schemas.android.com/apk/res-auto"
    android:id="@+id/fb_button"
    style="@style/FacebookLoginButton"
    android:layout_width="485dp"
    android:layout_height="64dp"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="-17dp"
    fb:login_text="@string/login_with_facebook"
    fb:logout_text="Logout" />

style.xml的FacebookLoginButton部分如下所示

<style name="FacebookLoginButton">
    <item name="android:background">@drawable/button_facebook</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textSize">21sp</item>
    <item name="android:gravity">center</item>
</style>

@可拖动/按钮
@颜色/白色
21便士
居中
drawable/button_facebook包含自定义按钮形状的png。 现在,旧版本的sdk一切正常,但新sdk出了问题。我得到这个:


如你所见,有两个facebook图标:带圆圈的一个是facebook按钮,第二个(大的一个)属于按钮(facebook drawable)。有办法隐藏带圆圈的图标吗

甚至我在使用fb登录时也遇到了同样的问题。。。。我通过添加以下代码修复了此问题

    fbLoginButton.setBackgroundResource(R.drawable.facebook);
    fbLoginButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
    fbLoginButton.setCompoundDrawablePadding(0);
    fbLoginButton.setPadding(0, 0, 0, 0);
    fbLoginButton.setText("");
下面是我的xml布局:

<com.facebook.widget.LoginButton
            xmlns:fb="http://schemas.android.com/apk/res-auto"
            android:id="@+id/fbLoginButton"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            fb:login_text=""
            fb:logout_text=""
            android:scaleType="centerInside" />

希望对你有帮助

编辑1:

Facebook可能会更改SDK中LoginButton类的位置,因此您可能需要相应地更改XML标记。在我的例子中,它在
com.facebook.widget.LoginButton中
仔细检查。

你可以使用android:drawableLeft=“@null”在最新的facebook v4 API中去掉小的
facebook
图标

,这是正确的答案:

<com.facebook.login.widget.LoginButton
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    facebook:com_facebook_login_text="LOGIN"
    facebook:com_facebook_logout_text="LOGOUT"/>

然后将以下代码放入onCreate方法中以获取配置文件信息

LoginManager.getInstance().registerCallback(callbackManager,
    new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            mAccessToken = loginResult.getAccessToken()
                    .getToken();
            PrefUtil.saveData("accesstoken",
                    mAccessToken, SignIn.this);
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {

                        @Override
                        public void onCompleted(org.json.JSONObject object,
                                                GraphResponse response) {


                            } catch (org.json.JSONException e) {
                                // TODO Auto-generated catch block

                                e.printStackTrace();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }

                        }
                    });
            Bundle parameters = new Bundle();
            parameters
                    .putString(
                            "fields",
                            "id,name,email,gender,birthday,first_name,last_name,location,picture");
            request.setParameters(parameters);
            request.executeAsync();
        }

        @Override
        public void onCancel() {
            Log.i(TAG, "LoginManager FacebookCallback onCancel");
            mFbProgressBar.setVisibility(View.GONE);
            mFacebookTxt.setVisibility(View.VISIBLE);
            if (pendingAction != PendingAction.NONE) {
                showAlert();
                pendingAction = PendingAction.NONE;
            }
        }

        @Override
        public void onError(FacebookException exception) {
            mFbProgressBar.setVisibility(View.GONE);
            mFacebookTxt.setVisibility(View.VISIBLE);
            Log.i(TAG, "LoginManager FacebookCallback onError");
            if (pendingAction != PendingAction.NONE
                    && exception instanceof FacebookAuthorizationException) {
                showAlert();
                pendingAction = PendingAction.NONE;
            }
        }

        private void showAlert() {
            new AlertDialog.Builder(SignIn.this)
                    .setTitle(R.string.cancelled)
                    .setMessage(R.string.permission_not_granted)
                    .setPositiveButton(R.string.ok, null).show();
        }
    });
LoginManager.getInstance().registerCallback(callbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
MacAccessToken=loginResult.getAccessToken()
.getToken();
PrefUtil.saveData(“accesstoken”,
mAccessToken,签名:此);
GraphRequest请求=GraphRequest.newmereRequest(
loginResult.getAccessToken(),
新建GraphRequest.GraphJSONObjectCallback(){
@凌驾
public void onCompleted(org.json.JSONObject对象,
GraphResponse(反应){
}catch(org.json.JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}
}
});
Bundle参数=新Bundle();
参数
putString先生(
“字段”,
“身份证、姓名、电子邮件、性别、生日、名、姓、地点、照片”);
请求。设置参数(参数);
request.executeAsync();
}
@凌驾
公开作废{
i(标记“LoginManager FaceBookCallbackOnCancel”);
mFbProgressBar.setVisibility(View.GONE);
mFacebookTxt.setVisibility(View.VISIBLE);
如果(pendingAction!=pendingAction.NONE){
showarert();
pendingAction=pendingAction.NONE;
}
}
@凌驾
public void onError(facebook异常){
mFbProgressBar.setVisibility(View.GONE);
mFacebookTxt.setVisibility(View.VISIBLE);
i(标记“LoginManager FacebookCallback onError”);
如果(pendingAction!=pendingAction.NONE
&&FacebookAuthorizationException的异常实例(FacebookAuthorizationException){
showarert();
pendingAction=pendingAction.NONE;
}
}
私有void showAlert(){
新建AlertDialog.Builder(登录此)
.setTitle(R.string.cancelled)
.setMessage(R.string.permission\u未授予)
.setPositiveButton(R.string.ok,null).show();
}
});

创建自己的按钮并设置背景图像。。然后点击按钮给facebook打电话..但是你用的是com.facebook.widget.LoginButton,我用的是com.facebook.login.widget.LoginButton,没关系。。。。它表示类LoginButton在facebookSDK中的位置。。。。我可能使用了旧版本的fb。。。添加java代码将解决您的问题。。。我100%确信,gradle构建将失败,因为没有定义
login\u text
logout\u text
anymore@Sierisimo有什么解决办法吗?@Mythul…谢谢…但是你在哪里找到了这方面的文档?如果我没记错的话,它就隐藏在他们的官方文档中。老实说,我确实花了1-2天的时间才发现它。@Mythul…你还有链接吗?提前感谢facebook为什么不将android:drawableLeft更改为android:drawableSTART=“@null”。android:drawableLeft不推荐使用。。。
LoginManager.getInstance().logOut();
LoginManager.getInstance().logInWithReadPermissions(SignIn.this, permissionNeeds);
LoginManager.getInstance().registerCallback(callbackManager,
    new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            mAccessToken = loginResult.getAccessToken()
                    .getToken();
            PrefUtil.saveData("accesstoken",
                    mAccessToken, SignIn.this);
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {

                        @Override
                        public void onCompleted(org.json.JSONObject object,
                                                GraphResponse response) {


                            } catch (org.json.JSONException e) {
                                // TODO Auto-generated catch block

                                e.printStackTrace();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }

                        }
                    });
            Bundle parameters = new Bundle();
            parameters
                    .putString(
                            "fields",
                            "id,name,email,gender,birthday,first_name,last_name,location,picture");
            request.setParameters(parameters);
            request.executeAsync();
        }

        @Override
        public void onCancel() {
            Log.i(TAG, "LoginManager FacebookCallback onCancel");
            mFbProgressBar.setVisibility(View.GONE);
            mFacebookTxt.setVisibility(View.VISIBLE);
            if (pendingAction != PendingAction.NONE) {
                showAlert();
                pendingAction = PendingAction.NONE;
            }
        }

        @Override
        public void onError(FacebookException exception) {
            mFbProgressBar.setVisibility(View.GONE);
            mFacebookTxt.setVisibility(View.VISIBLE);
            Log.i(TAG, "LoginManager FacebookCallback onError");
            if (pendingAction != PendingAction.NONE
                    && exception instanceof FacebookAuthorizationException) {
                showAlert();
                pendingAction = PendingAction.NONE;
            }
        }

        private void showAlert() {
            new AlertDialog.Builder(SignIn.this)
                    .setTitle(R.string.cancelled)
                    .setMessage(R.string.permission_not_granted)
                    .setPositiveButton(R.string.ok, null).show();
        }
    });