Android开发:如何修改Facebook登录流程中进度条的颜色
我之前也踩过这个坑!你用系统主题属性去改Facebook登录的进度条颜色肯定没用,因为Facebook的FacebookActivity内部用的是自己封装的进度条控件,根本不鸟系统的progressBarStyle配置。给你几个亲测有效的解决办法:
先贴一下你当前的配置,方便大家理解问题:
styles.xml:
<style name="FacebookStyle" parent="android:Theme.Translucent.NoTitleBar"> <item name="android:progressBarStyle">@style/FacebookProgressBarStyle</item> </style> <style name="FacebookProgressBarStyle"> <item name="android:color">#DBA347</item> </style>AndroidManifest.xml:
<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" tools:replace="android:theme" android:theme="@style/FacebookStyle" android:label="@string/app_name" />
办法1:用Facebook专属的主题属性
Facebook SDK其实提供了自己的主题属性来控制进度条,把系统属性换成Facebook的就行:
修改你的styles.xml:
<style name="FacebookStyle" parent="android:Theme.Translucent.NoTitleBar"> <!-- 替换成Facebook的专属进度条属性 --> <item name="facebook:progressBarStyle">@style/CustomFacebookProgress</item> </style> <style name="CustomFacebookProgress" parent="@style/Widget.ProgressBar"> <!-- 指定自定义的进度条drawable --> <item name="android:indeterminateDrawable">@drawable/custom_fb_progress</item> </style>
然后创建res/drawable/custom_fb_progress.xml,用你想要的#DBA347颜色定义进度条:
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360"> <shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="8" android:useLevel="false"> <size android:width="48dp" android:height="48dp" /> <gradient android:centerColor="#DBA347" android:endColor="#DBA347" android:startColor="#DBA347" android:type="sweep" android:useLevel="false" /> </shape> </rotate>
办法2:代码动态设置颜色
如果主题配置还是不生效,直接在代码里硬刚!在初始化Facebook SDK的时候设置进度条颜色:
在你的Application类或者启动Activity的onCreate里加这段代码:
// 初始化SDK FacebookSdk.sdkInitialize(getApplicationContext()); // 设置进度条颜色,替换成你的颜色资源 FacebookSdk.setProgressBarColor(ContextCompat.getColor(this, R.color.fb_progress_color));
记得在colors.xml里定义好颜色:
<color name="fb_progress_color">#DBA347</color>
办法3:直接覆盖SDK内置资源
利用Android资源优先级的特性,把Facebook SDK里的进度条drawable替换掉。你可以解压Facebook SDK的aar包(一般在app/build/intermediates/exploded-aar/com.facebook.android/facebook-login/xxx/目录下),找到它的进度条drawable(比如叫com_facebook_progress_bar.xml),然后在你自己项目的res/drawable目录下创建同名文件,用自定义颜色实现就行,这样SDK会优先用你项目里的资源。
最后提醒下:不同版本的Facebook SDK可能细节有差异,比如资源文件名或者属性名,你可以先确认下自己用的SDK版本再调整方案~
内容的提问来源于stack exchange,提问作者anthony

