Merci pour le bon conseil. Juste pour info, le copier-coller m'a donné une exception d'exécution disant: "XmlPullParserException: La balise <gradient> de la ligne de fichier XML binaire # 4 nécessite que l'attribut 'angle' soit un multiple de 45" .. Facilement corrigé en changeant l'angle en 270.
allclaws
Merci pour le correctif ... Mais je ne sais pas pourquoi cela pourrait arriver ... Avez-vous trouvé une raison spécifique?
Legend
@teedyay: Anytime pal :)
Legend
1
même que allclaws, l'angle doit être multiple de 45: "XmlPullParserException: La balise Binary XML file line # 4 <gradient> nécessite que l'attribut 'angle' soit un multiple de 45"
Youssef
29
Cela ne fonctionne pas bien avec la mise en surbrillance de la sélection: lorsque l'élément du haut ou du bas est sélectionné, son arrière-plan coloré est rectangulaire et dessiné au-dessus de l'arrière-plan aux coins arrondis.
Kris Van Bael le
56
Bien que cela ait fonctionné, cela a également supprimé toute la couleur d'arrière-plan. Je cherchais un moyen de faire juste la bordure et de remplacer simplement ce code de mise en page XML par celui-ci et j'étais prêt à partir!
Pour ceux qui rencontrent des problèmes avec la sélection, mettez en surbrillance la ligne du haut et du bas où le rectangle d'arrière-plan apparaît lors de la sélection, vous devez définir le sélecteur de votre vue de liste sur une couleur transparente.
cela n'a pas fonctionné pour moi. J'ai ajouté la ligne suivante, cependant, et elle s'en est débarrassée:android:cacheColorHint="@android:color/transparent"
cesar
1
Cela a définitivement résolu le problème de sélection pour moi - merci! Vous pouvez également utiliser android.R.color.transparent pour la couleur du sélecteur au lieu de créer la vôtre.
greg7gkb
3
Au lieu de le faire par programme, ajoutez ceci à votre ListView dans la mise en page XML pour masquer la couleur de sélection: android: listSelector = "# 00000000"
Elad Nava
@alvins Existe-t-il un moyen de rendre la mise en page sélectionnable pour la mise en évidence comme un élément de vue de liste?
Bharat Dodeja
que dois-je faire si je veux utiliser une couleur opaque pour listSelector?
suitianshi
3
Les autres réponses sont très utiles, merci aux auteurs!
Mais je ne voyais pas comment personnaliser le rectangle lors de la mise en évidence d'un élément lors de la sélection plutôt que de désactiver la mise en évidence @alvins @bharat dojeha.
Ce qui suit fonctionne pour moi pour créer un conteneur d'éléments de vue de liste arrondis sans contour et d'un gris plus clair lorsqu'il est sélectionné de la même forme:
Votre xml doit contenir un sélecteur tel que par exemple (dans res / drawable / customshape.xml):
et il faut également `` masquer '' le rectangle de sélection par défaut, par exemple dans onCreate (je cache également ma fine ligne de séparation grise entre les éléments):
La solution de nos jours est d'utiliser un CardViewavec support pour les coins arrondis intégré.
Réponse originale *
Une autre façon que j'ai trouvée était de masquer votre mise en page en dessinant une image au-dessus de la mise en page. Cela pourrait vous aider. Découvrez les coins arrondis arrondis d'Android XML
Encore une autre solution à la sélection met en évidence les problèmes avec le premier et le dernier élément de la liste:
Ajoutez un remplissage en haut et en bas de l'arrière-plan de votre liste égal ou supérieur au rayon. Cela garantit que la mise en évidence de la sélection ne chevauche pas vos courbes d'angle.
C'est la solution la plus simple lorsque vous avez besoin d'une mise en surbrillance non transparente de la sélection.
<?xml version="1.0" encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/android"><solidandroid:color="@color/listbg"/><strokeandroid:width="2dip"android:color="#D5D5D5"/><cornersandroid:radius="10dip"/><!-- Make sure bottom and top padding match corner radius --><paddingandroid:bottom="10dip"android:left="2dip"android:right="2dip"android:top="10dip"/></shape>
Cela m'a été incroyablement utile. Je voudrais suggérer une autre solution de contournement pour mettre parfaitement en évidence les coins arrondis si vous utilisez le vôtreCustomAdapter .
Définition de fichiers XML
Tout d'abord, allez dans votre dossier dessinable et créez 4 formes différentes:
pour créer une bordure, vous devez créer un autre fichier xml avec la propriété de solide et de coins dans le dossier pouvant être dessiné et l'appeler en arrière-plan
J'utilise une vue personnalisée que je dispose au-dessus des autres et qui dessine simplement les 4 petits coins de la même couleur que l'arrière-plan. Cela fonctionne quel que soit le contenu de la vue et n'alloue pas beaucoup de mémoire.
Réponses:
Voici une façon de le faire (grâce à la documentation Android!):
Ajoutez ce qui suit dans un fichier (par exemple, customshape.xml), puis placez-le dans (res / drawable / customshape.xml)
Une fois que vous avez terminé de créer ce fichier, définissez simplement l'arrière-plan de l'une des manières suivantes:
Par code:
listView.setBackgroundResource(R.drawable.customshape);
Via XML , ajoutez simplement l'attribut suivant au conteneur (ex: LinearLayout ou à n'importe quel champ):
J'espère que quelqu'un le trouvera utile ...
la source
Bien que cela ait fonctionné, cela a également supprimé toute la couleur d'arrière-plan. Je cherchais un moyen de faire juste la bordure et de remplacer simplement ce code de mise en page XML par celui-ci et j'étais prêt à partir!
la source
@ kris-van-bael
Pour ceux qui rencontrent des problèmes avec la sélection, mettez en surbrillance la ligne du haut et du bas où le rectangle d'arrière-plan apparaît lors de la sélection, vous devez définir le sélecteur de votre vue de liste sur une couleur transparente.
Dans color.xml, ajoutez simplement ce qui suit -
la source
android:cacheColorHint="@android:color/transparent"
Les autres réponses sont très utiles, merci aux auteurs!
Mais je ne voyais pas comment personnaliser le rectangle lors de la mise en évidence d'un élément lors de la sélection plutôt que de désactiver la mise en évidence @alvins @bharat dojeha.
Ce qui suit fonctionne pour moi pour créer un conteneur d'éléments de vue de liste arrondis sans contour et d'un gris plus clair lorsqu'il est sélectionné de la même forme:
Votre xml doit contenir un sélecteur tel que par exemple (dans res / drawable / customshape.xml):
Ensuite, vous devez implémenter un adaptateur de liste et remplacer la méthode getView pour définir le sélecteur personnalisé comme arrière-plan
et il faut également `` masquer '' le rectangle de sélection par défaut, par exemple dans onCreate (je cache également ma fine ligne de séparation grise entre les éléments):
Cette approche résout une solution générale pour les drawables, pas seulement ListViewItem avec différents états de sélection.
la source
Mettre à jour
La solution de nos jours est d'utiliser un
CardView
avec support pour les coins arrondis intégré.Réponse originale *
Une autre façon que j'ai trouvée était de masquer votre mise en page en dessinant une image au-dessus de la mise en page. Cela pourrait vous aider. Découvrez les coins arrondis arrondis d'Android XML
la source
Encore une autre solution à la sélection met en évidence les problèmes avec le premier et le dernier élément de la liste:
Ajoutez un remplissage en haut et en bas de l'arrière-plan de votre liste égal ou supérieur au rayon. Cela garantit que la mise en évidence de la sélection ne chevauche pas vos courbes d'angle.
C'est la solution la plus simple lorsque vous avez besoin d'une mise en surbrillance non transparente de la sélection.
la source
en fait, je pense que la meilleure solution est décrite sur ce lien:
http://blog.synyx.de/2011/11/android-listview-with-rounded-corners/
en bref, il utilise un arrière-plan différent pour les éléments du haut, du milieu et du bas, de sorte que ceux du haut et du bas soient arrondis.
la source
Cela m'a été incroyablement utile. Je voudrais suggérer une autre solution de contournement pour mettre parfaitement en évidence les coins arrondis si vous utilisez le vôtre
CustomAdapter
.Définition de fichiers XML
Tout d'abord, allez dans votre dossier dessinable et créez 4 formes différentes:
shape_top
shape_normal
shape_bottom
shape_round
Maintenant, créez une disposition de ligne différente pour chaque forme, c'est-à-dire pour
shape_top
:Vous pouvez également effectuer cette opération en modifiant l'arrière-plan par programme.
Et définissez un sélecteur pour chaque liste de formes, c'est-à-dire pour
shape_top
:Changer votre CustomAdapter
Enfin, définissez les options de mise en page dans votre
CustomAdapter
:Et c'est fait!
la source
pour créer une bordure, vous devez créer un autre fichier xml avec la propriété de solide et de coins dans le dossier pouvant être dessiné et l'appeler en arrière-plan
la source
J'utilise une vue personnalisée que je dispose au-dessus des autres et qui dessine simplement les 4 petits coins de la même couleur que l'arrière-plan. Cela fonctionne quel que soit le contenu de la vue et n'alloue pas beaucoup de mémoire.
la source