Styling FacebookActivity pour éviter une terrible barre de progression

Je viens d'implémenter la connexion via Facebook en utilisant leur SDK en conjonction avec ParseFacebookUtilsV4 .

Dans mon manifeste, j'ai dû déclarer une activité de FacebookActivity qui est lancée lorsque j'essaie de me connecter, et cela fonctionne très bien.

  • L'activité Android ne s'affiche pas lorsque l'écran est réveillé et que l'écran de verrouillage ne désactive pas
  • Android Studio - Facebook Login button render error
  • Existe-t-il une façon plus simple / meilleure de mettre une bordure / contour autour de mon TextView?
  • Comment puis-je définir launchMode dans AndroidManifest.xml - Utilisation de PhoneGap & JQM
  • API RESTful sécurisée qui peut être utilisée par une application Web (angulaire), iOS et Android
  • Récupérer une image de profil à l'aide de Facebook SDK 3.0 pour Android
  •  <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" /> 

    Cet extrait provient de documents officiels, donc je n'ai rien choisi. Ce que j'ai trouvé vraiment étrange, c'est son style. Sur mon émulateur (API 22), il a un ProgressBar qui semble venir des années 90! Y a-t-il un moyen de le façonner? J'ai essayé de changer l'attribut android:theme , mais sans succès.

    Entrez la description de l'image ici

    J'ai pensé à étendre com.facebook.FacebookActivity , mais après avoir creusé le code source, j'ai découvert qu'il gonfle un com.facebook.LoginFragment , qui est alors responsable de la barre de progression en fait. Des idées?

    6 Solutions collect form web for “Styling FacebookActivity pour éviter une terrible barre de progression”

    Vous pouvez maintenant définir le thème dans votre AndroidManifest.xml

    Commit src link

    Usage:

    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"/> 

    Ceci est valable pour facebook-android-sdk v4.8.0 +

    Tout d'abord, ce n'est pas une barre de progression, c'est un dialogue de progression. Je ne sais pas comment faire des progrès personnalisés dialoguer avec le style.

    Voici donc une solution qui modifie le style par défaut (Theme_Translucent_NoTitleBar) avec le style holo (Theme.Holo.Light). Pour cela, nous devons faire des changements dans Facebook SDK.

    1) Mettez le code ci-dessous dans 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) Et la deuxième chose que nous devons changer ici dans WebDialog.java à l'intérieur du paquetage com.facebook.widget.

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

    J'espère que cela vous aide.

    Une seule méthode fonctionne pour moi:

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

    Immédiatement après FacebookSdk.sdkInitialize

    L' android:theme vous avez défini sur votre activité dans votre manifeste est basé sur les thèmes d'origine qui ont été utilisés dans Android avant Honeycomb. C'est pourquoi votre ProgressBar est si vieux. Vous pouvez essayer un autre thème comme:

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

    Ceci est basé sur la nouvelle conception de matériaux, mais bien sûr, cela ne fonctionne que sur les appareils Lollipop. Consultez la bibliothèque AppCompat pour plus de styles de conception de matériaux compatibles avec les périphériques plus anciens.

    Vous pouvez configurer ce que vous voulez comme ceci:

      <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> 

    alors

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

    Lorsqu'une Activité crée la vue pour une boîte de dialogue, elle passe au thème de l'activité et recherche le thème spécifié par l'attribut android:alertDialogTheme . Ce que vous devez faire est de définir cet attribut sur le thème de dialogue AppCompat (qui pour <v21 par défaut est Theme.Holo):

    Dans le thème que vous appliquez à l'activité Facebook:

     <style name="MyFacebookTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> ... <item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog</item> ... </style> 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.