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

У меня возникла странная проблема с помощью нового Android android sdk 4. С более старой версией sdk я использовал:

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

drawable/button_facebook содержит png пользовательской формы кнопки. Теперь, когда старая версия sdk everithing работает хорошо, но с новым sdk что-то пошло не так. я получаю это:

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

4 ответа

Даже я столкнулся с той же проблемой, пока я работал с 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:

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

РЕДАКТИРОВАТЬ 1: Facebook может изменить местоположение класса LoginButton, которое присутствует в его SDK, поэтому вам может потребоваться изменить тег XML соответствующим образом. В моем случае он находился внутри com.facebook.widget.LoginButton, дважды проверьте его.


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


Вы можете просто использовать 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.lovetohave.love.ui.lovetextview></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();
 }
 });
</loginresult>

licensed under cc by-sa 3.0 with attribution.