无法使用 FirebaseUI 隐藏授权活动的标题栏

Posted

技术标签:

【中文标题】无法使用 FirebaseUI 隐藏授权活动的标题栏【英文标题】:Unable to hide the Title bar of Authorization Activity using FirebaseUI 【发布时间】:2017-01-01 09:09:32 【问题描述】:

我尝试使用以下样式

<style name= "AuthStyle">
<item name="android:windowBackground">@drawable/culture</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>

然后我在这里应用了上面的样式:

startActivityForResult(AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setProviders(AuthUI.EMAIL_PROVIDER,
                              AuthUI.FACEBOOK_PROVIDER,
                              AuthUI.GOOGLE_PROVIDER)
                .setTheme(R.style.AuthStyle)
                .build()
                ,1);

但是,标题栏仍在显示。任何有关如何删除/隐藏它的建议将不胜感激

【问题讨论】:

如果目前无法做到这一点,听起来它更适合feature request on the FirebaseUI repo。 感谢您:github.com/firebase/FirebaseUI-Android/issues/266 事实证明删除标题栏是可能的。该用户使用与我相同的代码,但是他的标题栏没有显示,而我的却显示:github.com/firebase/FirebaseUI-Android/issues/229 【参考方案1】:

Firebase UI 会覆盖/忽略主题中操作栏/应用栏的移除,因此我们必须作弊。在styles.xml:

<style name="AppThemeFirebaseAuth" parent="android:Theme.Material.Light.NoActionBar">
    <item name="android:actionBarStyle">@style/FirebaseAuthActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="FirebaseAuthActionBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/white</item>
</style>

(或者而不是@color/white,无论你的背景颜色如何。)

您开始登录活动的位置:

    Intent signInIntent = AuthUI.getInstance().createSignInIntentBuilder()
            .setProviders(Arrays.asList(
                    new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(),
                    new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build()))
            .setTheme(R.style.AppThemeFirebaseAuth)
            .setLogo(R.drawable.logo)
            .setIsSmartLockEnabled(!BuildConfig.DEBUG)
            .build();

请记住,在 Firebase UI 的未来版本中,操作栏/应用栏可能会变得有用或需要,因此这有点危险。

【讨论】:

标题文字可以改吗?【参考方案2】:

从firebase ui 4.3.1版本开始,下面的代码就足以隐藏tiltebar了,不需要做背景色的花样:

<style name="AppThemeFirebaseAuth" parent="android:Theme.Light.NoTitleBar">
    <item name="android:windowActionBarOverlay">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

只在创建 AuthUI 实例时引用样式

// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
    new AuthUI.IdpConfig.PhoneBuilder().build());
AuthUI.createSignInIntentBuilder()
      .setAvailableProviders(providers)
      .setTheme(R.style.AppThemeFirebaseAuth)
      .build(),

在 android 4.4.2 和 android 9(Nexus 模拟器)中测试

【讨论】:

以上是关于无法使用 FirebaseUI 隐藏授权活动的标题栏的主要内容,如果未能解决你的问题,请参考以下文章

Android.FirebaseUI-Android:由于异常活动,我们已阻止来自此设备的所有请求

FirebaseUI使用2个活动登录kotlin

FirebaseUI,指定在特定情况下要打开的特定活动(注册后)

具有依赖注入的FirebaseUI

Facebook 的 FirebaseUI 身份验证不起作用

无法将 java.lang.String 类型的对象转换为类型 - FirebaseUI