J'ai ce code:
<ListView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/cashItemsList"
Android:cacheColorHint="#00000000"
Android:divider="@drawable/list_divider"></ListView>
où @drawable/list_divider
est:
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="line">
<stroke
Android:width="1dp"
Android:color="#8F8F8F"
Android:dashWidth="1dp"
Android:dashGap="1dp" />
</shape>
mais je ne vois pas de diviseur.
Chers amis, voici pourquoi vous devriez utiliser 1px au lieu de 1dp ou 1dip: si vous spécifiez 1dp ou 1dip, Android réduira cette réduction. Sur un périphérique de 120dpi, cela devient quelque chose comme 0.75px traduit, qui arrondit à 0. Sur certains appareils, cela se traduit par 2-3 pixels, et il semble généralement moche ou négligée
Pour les diviseurs, 1px est la hauteur correcte si vous souhaitez un diviseur de 1 pixel et constitue l’une des exceptions à la règle "tout devrait être en plongée". Ce sera 1 pixel sur tous les écrans. De plus, 1px semble généralement mieux sur les écrans HDPI et au-dessus
Edit "Ce n'est plus 2012": vous devrez peut-être passer à dp/dip à partir d'une certaine densité d'écran
Ceci est une solution de contournement, mais fonctionne pour moi:
Créé res/drawable/divider.xml comme suit:
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<gradient Android:startColor="#ffcdcdcd" Android:endColor="#ffcdcdcd" Android:angle="270.0" />
</shape>
Et dans styles.xml pour l'élément listview, j'ai ajouté les lignes suivantes:
<item name="Android:divider">@drawable/divider</item>
<item name="Android:dividerHeight">1px</item>
La partie cruciale consistait à inclure ce paramètre 1px. Bien entendu, drawable utilise un dégradé (avec 1px) et ce n'est pas la solution optimale. J'ai essayé d'utiliser un AVC mais je ne l'ai pas fait fonctionner. (Vous ne semblez pas utiliser de styles, ajoutez donc simplement Android: attribut dividerHeight = "1px" pour ListView.
Ajouter Android:dividerHeight="1px"
et ça va marcher:
<ListView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/cashItemsList"
Android:cacheColorHint="#00000000"
Android:divider="@drawable/list_divider" Android:dividerHeight="1px"></ListView>
Le problème que vous rencontrez provient du fait qu'il vous manque Android: dividerHeight, dont vous avez besoin, et du fait que vous essayez de spécifier une épaisseur de trait dans votre dessin, ce que vous ne pouvez pas utiliser avec des diviseurs. étrange raison. Essentiellement, pour que votre exemple fonctionne, vous pouvez effectuer les opérations suivantes:
Créez votre dessin sous forme de rectangle ou de ligne, soit vous ne pouvez pas essayer de définir des dimensions, donc:
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="line">
<stroke Android:color="#8F8F8F" Android:dashWidth="1dp" Android:dashGap="1dp" />
</shape>
OU:
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle">
<solid Android:color="#8F8F8F"/>
</shape>
Puis créez un style personnalisé (juste une préférence mais j'aime bien pouvoir réutiliser des choses)
<style name="dividedListStyle" parent="@Android:style/Widget.ListView">
<item name="Android:cacheColorHint">@Android:color/transparent</item>
<item name="Android:divider">@drawable/list_divider</item>
<item name="Android:dividerHeight">1dp</item>
</style>
Enfin, déclarez votre vue liste en utilisant le style personnalisé:
<ListView
style="@style/dividedListStyle"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/cashItemsList">
</ListView>
Je suppose que vous savez comment utiliser ces extraits, sinon laissez-moi savoir. En gros, la réponse à votre question est que vous ne pouvez pas définir l'épaisseur du diviseur dans le dessin, vous devez y laisser la largeur indéfinie et utiliser Android: dividerHeight pour la définir à la place.
De la doc:
public void setDivider(Drawable divider) on ListView
/**
* Sets the drawable that will be drawn between each item in the list. If the drawable does
* not have an intrinsic height, you should also call {@link #setDividerHeight(int)}
*
* @param divider The drawable to use.
*/
On dirait que setDividerHeight()
doit être appelé pour que le diviseur apparaisse s'il n'a pas de hauteur intrinsèque
Votre @drawable/list_divide
devrait ressembler à ceci:
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="line">
<stroke
Android:height="1dp"
Android:color="#8F8F8F"
Android:dashWidth="1dp"
Android:dashGap="1dp" />
</shape>
Dans votre version, vous fournissez un Android:width="1dp"
_, changez-le simplement en un Android:height="1dp"
et ça devrait marcher!
De la doc :
emplacement du fichier:
res/drawable/filename.xml
Le nom de fichier est utilisé comme ID de ressource .
fondamentalement, vous aurez besoin de mettre un fichier nommé list_divider.xml
dans res/drawable/
afin que vous puissiez y accéder en tant que R.drawable.list_divider
; si vous pouvez y accéder de cette façon, vous pouvez utiliser Android:divider="@drawable/list_divider"
dans le XML pour ListView
.
Certaines personnes pourraient avoir une ligne solide. J'ai contourné cela en ajoutant Android:layerType="software"
à la vue référençant le dessinable.
J'ai eu le même problème. Cependant, la vue 1px ne semblait pas fonctionner sur mon Nexus 7 d'origine. J'ai remarqué que la densité de l'écran était de 213, ce qui est inférieur à 240 pixels utilisés dans xhdpi. Donc, je pensais que l'appareil était une densité mdpi.
Ma solution consistait à faire en sorte que le dossier dimens
ait un paramètre dividerHeight
. Je l'ai réglé sur 2dp
Dans le dossier values-mdpi
Mais sur 1dp
Dans le dossier values-hdpi
, Etc.
Les docs Android avertissent que des choses disparaissent en raison d'une erreur d'arrondi ... Essayez peut-être dp au lieu de px, et essayez également> 1 en premier pour voir si c'est le problème d'arrondi.
voir http://developer.Android.com/guide/practices/screens_support.html#testing
pour la section "Images avec 1 pixel hauteur/largeur"
vous avez oublié un "r" à la fin du séparateur dans la présentation XML de votre séparateur
vous appelez le layout @ drawable/list_divider mais votre diviseur xml s'appelle "list_divide"