[android] setBackgroundResource () ignore mes attributs de disposition XML



Answers

Ajoutant à ce que dmon a suggéré, voici une fonction que vous pouvez simplement lancer dans votre classe util afin que vous n'ayez pas à sauter à travers les cerceaux chaque fois que vous mettez à jour une ressource. C'est vraiment juste son code enveloppé dans une fonction.

public static void updateBackgroundResourceWithRetainedPadding(View view, int resourceID)
{
    int bottom = view.getPaddingBottom();
    int top = view.getPaddingTop();
    int right = view.getPaddingRight();
    int left = view.getPaddingLeft();
    view.setBackgroundResource(resourceID);
    view.setPadding(left, top, right, bottom);
}
Question

J'ai une vue qui est utilisée comme un élément dans un ListView . Dans mon adaptateur personnalisé, je modifie l'arrière-plan de la vue en utilisant View.setBackgroundResource() fonction de la position de l'élément dans la liste. (J'ai des actifs distincts pour le premier et le dernier élément de la liste.)

Cela définit l'image d'arrière-plan correcte comme prévu, mais il a l'effet secondaire désagréable que tout le rembourrage que j'avais défini dans la définition XML de la vue est complètement ignoré.

(Si je place l'arrière-plan dessinable dans le XML, et n'essaie pas de le faire varier au moment de l'exécution dans l'adaptateur, le remplissage fonctionne bien.)

Comment puis-je modifier l'image d'arrière-plan et conserver le remplissage? Est-ce un bug?

EDIT il semble que quelqu'un d'autre a trouvé le même problème ici: Est - ce que changer l'arrière-plan change aussi le remplissage d'un LinearLayout?




Une autre solution pour laquelle j'ai opté, au lieu d'obtenir et de définir le remplissage dans le code proposé par dmon, n'utilise pas de remplissage et utilise plutôt des marges pour les éléments internes.

Selon votre mise en page, il peut s'agir de la même quantité de code XML et ne nécessiterait aucun Java. Cela me semble un peu plus sale, mais pas aussi sale que d'ajouter du code Java partout.






Links