自定义Firebase ui验证Android

自定义Firebase ui验证Android,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,最近,Firebase在Github上公开了他们的Firebase Auth插件身份验证系统。尽管这是一个非常好的步骤,但他们还没有发布任何关于如何定制软件包中所有UI的文档。这样做的一个选择是,克隆完整的repo,然后深入挖掘代码,修改它,然后在我们的Android项目中包含每个类、依赖项。有更简单的解决方案吗?您可以在style.xml资源文件中创建一个样式,然后使用该样式自定义Firebase Auth UI。创建Auth实例时,可以使用setTheme()设置新样式 startActiv

最近,Firebase在Github上公开了他们的Firebase Auth插件身份验证系统。尽管这是一个非常好的步骤,但他们还没有发布任何关于如何定制软件包中所有UI的文档。这样做的一个选择是,克隆完整的repo,然后深入挖掘代码,修改它,然后在我们的Android项目中包含每个类、依赖项。有更简单的解决方案吗?

您可以在
style.xml
资源文件中创建一个样式,然后使用该样式自定义Firebase Auth UI。创建Auth实例时,可以使用
setTheme()
设置新样式

startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setProviders(
                            Arrays.asList(
                                    new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
                                    new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(),
                                    new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build()
                            )
                    )
                    .setTheme(R.style.LoginTheme)
                    .setLogo(R.mipmap.logo)
                    .build(),
            RC_SIGN_IN);
下面是如何配置样式主题的示例

<style name="LoginTheme" parent="FirebaseUI">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorButtonNormal">@color/colorAccent</item>
    <item name="colorControlNormal">@android:color/white</item>
    <item name="colorControlActivated">@android:color/white</item>
    <item name="colorControlHighlight">@android:color/white</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
    <item name="android:windowBackground">@mipmap/bg_login</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:textColorHint">@android:color/white</item>
</style>

@颜色/原色
@颜色/原色暗
@颜色/颜色重音
@颜色/颜色重音
@android:彩色/白色
@android:彩色/白色
@android:彩色/白色
@android:彩色/白色
@android:彩色/白色
@android:彩色/白色
@mipmap/bg\u登录
假的
真的
@android:彩色/白色
使用上述方法,我能够实现以下结果:

这仍然不能提供你想要的那么多灵活性,但是你可以在一定程度上对它进行定制,这样它就可以与你的品牌标志和颜色主题配合使用

如果您想进一步使用此方法,您可以从以下资源中找到一些有用的信息:


在styles.xml资源文件中创建以下样式

1.全屏主题:

<style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@drawable/bg_login</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="colorControlNormal">@color/colorWhite</item>
    <item name="colorControlActivated">@color/colorWhite</item>
    <item name="colorControlHighlight">@color/colorWhite</item>
</style>

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

如果您想自定义身份验证屏幕,而仅更改样式对您来说不起作用,您也可以使用以下方法:

AuthMethodPickerLayout customLayout = new AuthMethodPickerLayout
.Builder(R.layout.your_custom_layout_xml)
.setGoogleButtonId(R.id.bar)
.setEmailButtonId(R.id.foo)
// ...
.setTosAndPrivacyPolicyId(R.id.baz)
.build();

startActivityForResult(
AuthUI.getInstance(this).createSignInIntentBuilder()
    // ...
    .setAuthMethodPickerLayout(customLayout)
    .build());
这允许您创建自定义布局,并且您可以为正在使用的不同登录提供程序定义ID,以便Firebase可以在单击这些按钮时自动调用正确的提供程序


有关更多信息,请阅读以下内容:

FirebaseUI始终是开源的。实际上,没有关于代码分叉和修改的指南。仅链接的答案并不是好的答案。请编辑您的问题,将您链接中回答OP问题的相关部分包括在内,或者将您的答案全部删除(有用的链接可以用于评论)您是如何将徽标居中的。我的右边对齐。另外,如何防止在Firebase AuthUI之前加载主活动。在我的例子中,主活动的加载速度比Firebase AuthUI快。我认为这可能是背景图像的问题,但即使没有背景图像,它仍然是一样的
<item android:drawable="@mipmap/cool_photo"/>

<item android:top="120dp">
    <bitmap
        android:src="@mipmap/your_logo"
        android:gravity="top|center_horizontal" />
</item>
<style name="FirebaseUI.EditText">
    <item name="android:paddingBottom">14dp</item>
    <item name="android:paddingTop">14dp</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="colorControlActivated">@color/colorWhite</item>
    <item name="colorControlHighlight">@color/colorWhite</item>
    <item name="android:textColorHint">@color/colorWhite</item>
    <item name="android:textColor">@color/colorWhite</item>
</style>

<style name="FirebaseUI.Text.TextInputLayout" parent="@style/FirebaseUI.EditText" />

<style name="FirebaseUI.Text.HintText" parent="@style/FirebaseUI.EditText" />
 <style name="FirebaseUI.Text.Link">
    <item name="android:textColor">@color/colorBlue</item>
</style>
 .setAvailableProviders(Collections.singletonList(
                    new AuthUI.IdpConfig.PhoneBuilder()
                            .build()))
            .setTheme(R.style.LoginTheme)
            .setLogo(R.drawable.urlogo)
            .setTosAndPrivacyPolicyUrls("https://urls","https://urls")
            .build();
AuthMethodPickerLayout customLayout = new AuthMethodPickerLayout
.Builder(R.layout.your_custom_layout_xml)
.setGoogleButtonId(R.id.bar)
.setEmailButtonId(R.id.foo)
// ...
.setTosAndPrivacyPolicyId(R.id.baz)
.build();

startActivityForResult(
AuthUI.getInstance(this).createSignInIntentBuilder()
    // ...
    .setAuthMethodPickerLayout(customLayout)
    .build());