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" />
Этот фрагмент из официальных документов, поэтому я ничего не выбрал. То, что я нашел действительно странным, - это его стиль. На моем эмуляторе (API 22) у него есть ProgressBar, который, похоже, приходит с 90-х годов! Есть ли способ его стилизовать? Я попытался изменить атрибут android:theme
, но без успеха.
![enter image description here]()
Я думал о расширении com.facebook.FacebookActivity
, но после копания в исходном коде я обнаружил, что он раздувает com.facebook.LoginFragment
, который затем отвечает за индикатор выполнения. Любые идеи?
Ответы
Ответ 1
Теперь вы можете установить тему в своем AndroidManifest.xml
зафиксировать ссылку src
Использование:
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 +
Ответ 2
Прежде всего, это не прогресс, это прогресс диалога. Я не знаю, как создать пользовательский диалог прогресса со стилем.
Итак, вот решение, изменяющее стиль по умолчанию (Theme_Translucent_NoTitleBar) с головым стилем (Theme.Holo.Light). Для этого нам нужно внести изменения в SDK в Facebook.
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;
Надеюсь, это поможет вам.
Ответ 3
Для меня работает только один метод:
FacebookSdk.setWebDialogTheme(android.R.style.Theme_Holo_Light_NoActionBar);
сразу после FacebookSdk.sdkInitialize
Ответ 4
android:theme
, установленный для вашей активности в манифесте, основан на исходных тем, которые были использованы в Android до Honeycomb. Вот почему ваш ProgressBar выглядит настолько старым. Вы можете попробовать другую тему, например:
@android:style/Theme.Material.NoActionBar.TranslucentDecor
Это основано на новом дизайне материалов, но, конечно же, это работает только на устройствах Lollipop. Посмотрите в AppCompat-Library для более стилей Material Design, совместимых со старыми устройствами.
Ответ 5
Вы можете создавать все, что хотите:
<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>
Ответ 6
Когда 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>