Подтвердить что ты не робот

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, который затем отвечает за индикатор выполнения. Любые идеи?

4b9b3361

Ответ 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>