J'ai trouvé une bonne solution avec celle-ci:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is the line -->
<item android:top="-1dp" android:right="-1dp" android:left="-1dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke android:width="1dp" android:color="#ffffff" />
</shape>
</item>
</layer-list>
Cela fonctionne bien au cas où vous auriez besoin d'un fond transparent mais toujours d'une couleur de trait ouverte (dans mon cas, je n'avais besoin que d'une ligne de fond). Si vous avez besoin d'une couleur d'arrière-plan, vous pouvez ajouter une couleur de forme unie comme dans la réponse Maragues.
MODIFIER 1
Parfois, pour les appareils à haute densité, l'utilisation de faibles valeurs de pendage peut se terminer par des courses ou des distances très minces ou invisibles. Cela peut également vous arriver lors de la définition des diviseurs ListView.
La solution de contournement la plus simple consiste à utiliser une distance de 1px au lieu de 1dp. Cela rendra la ligne toujours visible à toutes les densités. La meilleure solution serait de créer des ressources de dimension pour chaque densité, afin d'obtenir la meilleure taille pour chaque appareil.
Modifier 2
Amusant, mais j'ai essayé de l'utiliser 6 ans plus tard et je n'arrive pas à obtenir un bon résultat sur les appareils Lollipop.
La solution actuelle est probablement d'utiliser 9-patch. Android aurait dû apporter une solution simple à ce problème après tout ce temps.
Je sais que cette question a été postée il y a longtemps, donc la réponse ne sera pas utilisée par la personne qui a posté cette question, mais cela peut quand même aider les autres.
Utilisez la
inset
balise et attribuez une valeur négative à la bordure latérale que vous souhaitez supprimer.Les valeurs possibles sont:
android:insetTop="-1dp" android:insetBottom="-1dp" android:insetLeft="-1dp" android:insetRight="-1dp"
la source
J'ai résolu cela en utilisant un calque de liste, combinant deux formes, dont l'une avec une hauteur de 1dp placée en bas
optionscreen_bottomrectangle.xml:
Ensuite, dans le fichier layout / main.xml
Ce qui remplit l'espace entre table_options et exit_bar avec un arrière-plan et juste avant que exit_bar imprime une ligne de 1dp. Cela a fait l'affaire pour moi, j'espère que cela aide quelqu'un d'autre.
Réponse modifiée pour placer les calques dans le bon ordre. Thx Alex!
la source
Une autre interprétation des autres réponses en utilisant plutôt le remplissage. Ce petit extrait fait une bordure en haut et en bas.
la source
La réponse de @ Maragues est inversée, car les éléments dessinés de la liste des calques se dessinent de haut en bas (ce qui signifie que le dernier élément de la liste est dessiné en haut):
Cela remplira efficacement la forme avec la couleur de la ligne, puis dessinera la couleur d'arrière-plan par-dessus, laissant le dernier 1dp clair pour que la couleur de la ligne apparaisse.
la source
la source
J'ai utilisé le code suivant.
la source
Simple et efficace
Pour avoir une vue transparente et tout ce qui est à l'extérieur a une superposition d'une certaine couleur, ce que vous pouvez faire est de créer les vues qui encapsulent la vue centrale sans que les vues extérieures marchent sur la vue centrale .
De cette façon, vous évitez d'avoir un dessin externe à la mise en page et vous avez plus de contrôle sur les distances des vues sans avoir à effectuer des calculs à l'exécution.
GL
la source