Le fond d'écran PopupWindow devient parfois transparent et violet

Voici comment je crée un PopupWindow :

 private static PopupWindow createPopup(FragmentActivity activity, View view) { PopupWindow popup = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); popup.setOutsideTouchable(true); popup.setFocusable(true); popup.setBackgroundDrawable(new ColorDrawable(Tools.getThemeReference(activity, R.attr.main_background_color))); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) popup.setElevation(Tools.convertDpToPixel(8, activity)); PopupWindowCompat.setOverlapAnchor(popup, true); return popup; } 

main_background_color est une couleur unie, blanche ou noire selon le thème. Il arrive quelquefois:

  • Table SQLite avec colonne entière stocke une chaîne
  • Vérifiez si l'application est en cours d'exécution
  • Android: comment obtenir la valeur de l'attribut "listPreferredItemHeight" dans le code?
  • L'annotation Java exécute une méthode dans la déclaration d'annotation (utilisation pour Android)
  • La disposition linéaire dans la disposition linéaire est ajoutée mais n'est pas visible
  • Comment afficher un spinner de progression dans Android, quand doInBackground () est en cours d'exécution
  • Entrez la description de l'image ici

    Comment puis-je éviter cela? Il se produit dans l'émulateur avec Android 6 SOMETIMES par exemple … Normalement, l' PopupWindow plan PopupWindow fonctionne comme prévu …

    modifier

    En outre, voici ma méthode getThemeReference :

     public static int getThemeReference(Context context, int attribute) { TypedValue typeValue = new TypedValue(); context.getTheme().resolveAttribute(attribute, typeValue, false); if (typeValue.type == TypedValue.TYPE_REFERENCE) { int ref = typeValue.data; return ref; } else { return -1; } } 

    EDIT 2 – cela peut résoudre le problème: utiliser getThemeColor au lieu de getThemeReference

     public static int getThemeColor(Context context, int attribute) { TypedValue typeValue = new TypedValue(); context.getTheme().resolveAttribute(attribute, typeValue, true); if (typeValue.type >= TypedValue.TYPE_FIRST_COLOR_INT && typeValue.type <= TypedValue.TYPE_LAST_COLOR_INT) { int color = typeValue.data; return color; } else { return -1; } } 

  • Qu'est-ce que l'on entend par métadonnées dans Android?
  • La barre d'état Android attend des icônes de taille 25x25dp alors que les lignes directrices recommandent 32x32dp. Qui a tort?
  • SetBackground vs setBackgroundDrawable (Android)
  • Les préférences dépendantes affichent une mauvaise police de couleurs lorsqu'elles sont désactivées
  • Gif n'est pas animé dans la liste personnalisée
  • Camera.takePicture () ne travaille pas sur mes téléphones JB & GB & Froyo
  • One Solution collect form web for “Le fond d'écran PopupWindow devient parfois transparent et violet”

    Merci pour la mise à jour, je vous ai demandé de montrer la méthode parce que j'utilise le même genre de choses dans mes applications pour récupérer les attributs de couleur, mais nos méthodes sont un peu différentes.

    Voici le mien:

     public static int getThemeColor(Context context, int attributeId) { TypedValue typedValue = new TypedValue(); TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[] { attributeId }); int color = a.getColor(0, 0); a.recycle(); return color; } 

    Même si je ne peux pas être sûr que ce soit le problème, il y a quelque chose qui ne va pas avec vos commentaires. L'appel new ColorDrawable() attend une couleur, pas une référence. J'ai parfois aussi fait cette erreur dans le passé et j'ai également des couleurs bizarres, car le système essayait de générer une couleur avec un identifiant de référence. Avez-vous essayé une couleur réelle comme rouge pour voir si votre méthode fonctionne vraiment?

    Je substituerais de toute façon votre méthode à la mienne parce qu'elle vous garantit de récupérer une couleur.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.