我在我的应用程序中包含了 Fb 登录,当我单击“登录”按钮 (com.facebook.widget.LoginButton) 时,它会在登录前打开一个带有对话框的额外 Activity ,如下图所示。为什么会这样?我不想在登录前打开这个额外的 Activity 。知道怎么做吗?
我的主要 Activity :
public class MainActivity extends SherlockFragmentActivity {
//Button fblogin;
Button signup_with_email;
Button log_in;
private UiLifecycleHelper uiHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(this, null);
uiHelper.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
setListeners();
}
private void initialize() {
//fblogin = (Button) findViewById(R.id.login_button);
signup_with_email = (Button) findViewById(R.id.signup_with_email);
log_in = (Button) findViewById(R.id.log_in);
}
private void setListeners() {
/*fblogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
*/
signup_with_email.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,
EmailSignUpActivity.class));
}
});
log_in.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, LoginActivity.class));
}
});
}
@Override
protected void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
startActivity(new Intent(MainActivity.this, DashBoardActivity.class));
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
最佳答案
我来晚了一点,但接受的答案是错误的。
在深入研究 SDK 代码后,我发现了以下内容:Facebook 启动 com.facebook.LoginActivity 用于登录过程,由于您没有指定自定义主题,它将显示在您的屏幕截图中。这是 LoginActivity 的 JavaDoc:
This Activity is a necessary part of the overall Facebook login process but is not meant to be used directly. Add this activity to your AndroidManifest.xml to ensure proper handling of Facebook login.
他们建议使用 Theme.Translucent.NoTitleBar:
<activity android:name="com.facebook.LoginActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
但是,如果您使用建议的主题,Activity 将是半透明的,但仍会在中间显示不确定的 ProgressBar(动画加载符号)。
就个人而言,我更喜欢使用 DialogFragment 来指示加载过程并且根本不显示 Facebook 的 LoginActivity:
<activity
android:name="com.facebook.LoginActivity"
android:theme="@android:style/Theme.NoDisplay" />
关于Android - facebook sdk 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15984855/