Styling FacebookActivity, чтобы избежать ужасного шага прогресса

Я только что осуществил вход в систему через Facebook, используя их SDK в сочетании с ParseFacebookUtilsV4 .

В моем манифесте я должен был объявить FacebookActivity который запускается, когда я пытаюсь войти, и это отлично работает.

 <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> Размер <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> 

Этот фрагмент из официальных документов, поэтому я ничего не выбрал. То, что я нашел действительно странным, – это его стиль. На моем эмуляторе (API 22) у него есть ProgressBar, который, похоже, приходит с 90-х годов! Есть ли способ его стиля? Я попытался изменить атрибут android:theme , но без успеха.

Введите описание изображения здесь

Я думал о расширении com.facebook.FacebookActivity , но после копания в исходном коде я узнал, что он раздувает com.facebook.LoginFragment , который затем отвечает за индикатор выполнения. Есть идеи?

Теперь вы можете установить тему в своем AndroidManifest.xml

Commit src link

Применение:

AndroidManifest.xml

  <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <meta-data android:name="com.facebook.sdk.ApplicationName" android:value="@string/app_name"/> <meta-data android:name="com.facebook.sdk.WebDialogTheme" android:value="@style/Theme.AppCompat.Light.NoActionBar"/> 

Это справедливо для facebook-android-sdk v4.8.0 +

Прежде всего, это не прогресс, это диалог прогресса. Я не знаю, как настроить пользовательский диалог прогресса со стилем.

Итак, вот решение, изменяющее стиль по умолчанию (Theme_Translucent_NoTitleBar) с головым стилем (Theme.Holo.Light). Для этого нам нужно внести изменения в SDK.

1) Поместите ниже код в style.xml

 <style name="NewDialogTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">false</item> <item name="android:background">@android:color/transparent</item> </style> 

2) И второе, что нам нужно изменить здесь, в WebDialog.java внутри пакета com.facebook.widget.

 public static final int DEFAULT_THEME = R.style.NewDialogTheme; 

Надеюсь, это вам поможет.

Для меня работает только один метод:

 FacebookSdk.setWebDialogTheme(android.R.style.Theme_Holo_Light_NoActionBar); 

Сразу после FacebookSdk.sdkInitialize

android:theme вы указали на свою активность в манифесте, основана на оригинальных темах, которые были использованы в Android до Honeycomb. Вот почему ваш ProgressBar выглядит настолько старым. Вы можете попробовать другую тему:

 @android:style/Theme.Material.NoActionBar.TranslucentDecor 

Это основано на новом дизайне материалов, но, конечно, это работает только на устройствах Lollipop. Изучите AppCompat-Library для более стилей Material Design, совместимых со старыми устройствами.

Вы можете стилизовать все, что хотите:

  <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="android:windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="android:textViewStyle">@style/MyStyles.TextView</item> <item name="android:buttonStyle">@style/MyStyles.Button</item> <item name="android:progressBarStyle">@style/MyStyle.ProgressStyle</item> <item name="android:indeterminateProgressStyle">@style/MyStyle.ProgressStyle</item> <item name="android:actionBarStyle">@style/MyStyle.Toolbar</item> </style> 

затем

  <style name="MyStyle.ProgressStyle" parent="android:Widget.Holo.Light.ProgressBar"> <item name="...">...</item> </style> 

Когда Activity создает представление для диалогового окна, он переходит к теме Activity и просматривает тему, указанную атрибутом android:alertDialogTheme . Что вам нужно сделать, это установить этот атрибут для темы диалога AppCompat (для <v21 по умолчанию для Theme.Holo):

В теме, которую вы применяете к деятельности в Facebook:

 <style name="MyFacebookTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> ... <item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog</item> ... </style>