Facebookloginbutton:应用自定义样式

我正在面对一个奇怪的问题,通过使用新的Facebook的Android SDK 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> 

drawable / button_facebook包含自定义button形状的png。 现在,老版本的sdk运行正常,但是新的sdk出了问题。 我得到这个:

在这里输入图像说明

正如你所看到的,theres两个Facebook的图标:圈出的一个是Facebook的button,第二个(大的)属于button_facebook可绘制)。 有一种方法可以隐藏圆圈图标?

Solutions Collecting From Web of "Facebookloginbutton:应用自定义样式"

即使我面临着同样的问题,而我正在与fblogin….我通过添加以下代码解决了问题….

  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里面检查它。

在最新的Facebook v4 API中,这是正确的答案:

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

您可以使用android:drawableLeft="@null"来摆脱小Facebook图标

 <FrameLayout android:id="@+id/facebook_lay" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="1" android:background="@drawable/facebook_button_bg"> <com.lovetohave.love.ui.LoveTextView android:id="@+id/facebook_txt" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/selectableItemBackgroundBorderless" android:clickable="true" android:gravity="center" android:text="@string/facebook" android:textColor="@color/white" android:textSize="@dimen/material_small" app:customFont="fonts/Roboto-Medium.ttf" /> <com.rey.material.widget.ProgressView android:id="@+id/fb_progress_view_cir" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center" android:visibility="gone" app:cpd_strokeColor="#fff" app:cpd_strokeSize="1dp" app:pv_autostart="true" app:pv_circular="true" app:pv_progressMode="indeterminate" app:pv_progressStyle="@style/CircularProgress1" /> </FrameLayout> 

你可以像文本视图或buttondevise,并添加下面的代码button点击事件。

 LoginManager.getInstance().logOut(); LoginManager.getInstance().logInWithReadPermissions(SignIn.this, permissionNeeds); 

然后将下面的代码放在onCreate方法中以获取configuration文件信息

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