android - 如何自定义 com.facebook.widget.LoginButton 的用户界面

标签 android facebook android-layout android-widget

我按照本教程(this)实现了 facebook 登录,虽然它可以登录并相应地检索我的电子邮件,但我想实现一个自定义登录图标的问题。

这是我尝试登录的xml

   <com.facebook.widget.LoginButton
        android:id="@+id/authButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:src="@drawable/ic_launcher" />

Activity :

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lblEmail = (TextView) findViewById(R.id.t);

    LoginButton authButton = (LoginButton) findViewById(R.id.authButton);
    authButton.setOnErrorListener(new OnErrorListener() {

        @Override
        public void onError(FacebookException error) {
            Log.i(TAG, "Error " + error.getMessage());
        }
    });
    // set permission list, Don't foeget to add email
    authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
    // session state call back event
    authButton.setSessionStatusCallback(new Session.StatusCallback() {

        @SuppressWarnings("deprecation")
        @Override
        public void call(Session session, SessionState state,
                Exception exception) {

            if (session.isOpened()) {
                Log.i(TAG, "Access Token" + session.getAccessToken());
                Request.executeMeRequestAsync(session,
                        new Request.GraphUserCallback() {
                            @Override
                            public void onCompleted(GraphUser user,
                                    Response response) {
                                if (user != null) {
                                    Log.i(TAG, "User ID " + user.getId());
                                    Log.i(TAG,
                                            "Email "
                                                    + user.asMap().get(
                                                            "email"));
                                    lblEmail.setText(user.asMap()
                                            .get("email").toString());
                                }
                            }
                        });
            }

        }
    });
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);
}

谢谢

最佳答案

不久前我自己做了这个,它是您需要更改的后台资源,但是通过 XML 执行它是行不通的,因为它是硬编码在构造函数中的。

您应该扩展 LoginButton 类并创建如下所示的双参数构造函数

  public LoginButton(Context context, AttributeSet attrs) {
     super(context, attrs);
     this.setBackgroundResource(R.drawable.my_own_drawable);
     this.setCompoundDrawablesWithIntrinsicBounds(R.drawable.my_own_icon, 0, 0, 0);
  }

关于android - 如何自定义 com.facebook.widget.LoginButton 的用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21364556/

相关文章:

java - 如何给WebView添加后退按钮?

facebook - 在 FB 图形 API 中获取 friend 的 friend

java - Android LinearLayout 间距

java - 如果文本的最大行数超过 4 条,如何显示阅读更多文本?

java - fragment 切换还是多个 Activity ?

android - AnimationDrawable.isRunning() 总是返回 true

java - 在android studio上读取textview中的html对象

android - 如何从 Intent 启动 ListActivity?

facebook - 按日期从 Facebook 页面获取帖子

java - android 在 Facebook 和其他社交媒体上分享