Кнопка входа в Facebook: примените собственный стиль

Я столкнулся с странной проблемой, используя новый Android 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" /> 

Раздел FacebookLoginButton в стиле.xml выглядит так:

 <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 содержит png пользовательской формы кнопки. Теперь whit старая версия sdk everithing работает хорошо, но с новым sdk что-то пошло не так. Я получаю это:

Введите описание изображения здесь

Как вы можете видеть, theres two facebook icon: круглая одна из кнопок facebook, вторая (большая) принадлежит кнопке button_facebook drawable). Есть способ скрыть кружку иконки?

Solutions Collecting From Web of "Кнопка входа в Facebook: примените собственный стиль"

Даже я столкнулся с той же проблемой, пока я работал с fb login …. Я исправил проблему, добавив следующий код ….

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

Надеюсь, это поможет вам.

EDIT 1:
Facebook может изменить местоположение класса LoginButton, которое присутствует в его SDK, поэтому вам может потребоваться изменить тег XML соответствующим образом. В моем случае это было внутри com.facebook.widget.LoginButton проверьте его дважды.

В последнем API Facebook v4 это правильный ответ:

 <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> 1 <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> 

Вы можете создать дизайн как текстовое окно или кнопку. И добавить следующий код внутри события нажатия кнопки.

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

Затем введите следующий код в метод 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(); } });