web-dev-qa-db-ja.com

Facebookログインボタン:カスタムスタイルを適用

新しい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>

drawable/button_facebookには、カスタムボタン形状のpngが含まれています。これで、古いバージョンのsdk everithingは正常に機能しますが、新しいsdkを使用すると、問題が発生します。私はこれを取得します:

enter image description here

ご覧のように、2つのfacebookアイコンがあります。丸で囲まれたアイコンはfacebookボタンで、2番目のアイコン(大きなボタン)は、button_facebookドローアブルに属しています)。丸で囲まれたアイコンを非表示にする方法はありますか?

9
giozh

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再確認してください。

14
Gowtham Raj

最新の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"/>
20
Mythul

Android:drawableLeft="@null"は、小さいFacebookアイコンを削除します

4
Mohammad Haque
<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>

Textviewやbuttonのようにデザインし、ボタンクリックイベント内に次のコードを追加できます。

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