2017-01-03 2 views
1

J'ai créé une liste déroulante de liste simple que je veux utiliser comme un indicateur météo ou pas un appareil est en ligne. Le drawable se compose d'une bague extérieure et un cercle intérieur:Android Layer-List Drawable avec deux éléments mal dessinés et ayant la mauvaise taille

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:width="14dp" 
     android:height="14dp" 
     android:gravity="center"> 
     <shape android:shape="oval"> 
      <stroke 
       android:width="1dp" 
       android:color="@color/colorLightGray" /> 
     </shape> 
    </item> 
    <item 
     android:width="10dp" 
     android:height="10dp" 
     android:gravity="center"> 
     <shape android:shape="oval"> 
      <solid android:color="@color/colorLightGray" /> 
     </shape> 
    </item> 
</layer-list> 

enter image description here

Dans ma mise en page xml, le drawable semble être correct quand j'assigne comme la source de mon point de vue de l'image:

enter image description here

Cependant, si je lance le code sur un appareil, il ressemble à ceci:

enter image description here

J'ai également dû définir la largeur et la hauteur dans ma mise en page sinon l'image ne serait pas du tout affichée.

QUESTIONS:

  • Que dois-je faire pour que je puisse utiliser Largeur/hauteur de wrap_content dans ma mise en page XML et configurer la taille dans la couche liste?
+0

Je crois, il est juste tronquée, parce que la taille disponible est plus petit que 10dp. Au lieu de la taille explicite, essayez "match_parent" pour les deux cercles et layout_margin = "4" pour le cercle intérieur – cyanide

Répondre

0

essayer cette layerlist drawable:

<?xml version="1.0" encoding="utf-8"?> 
 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
 
    <item android:gravity="center"> 
 
     <shape android:shape="oval"> 
 
      <size 
 
       android:width="14dp" 
 
       android:height="14dp" /> 
 
      <stroke 
 
       android:width="1dp" 
 
       android:color="@color/colorLightGray" /> 
 
     </shape> 
 
    </item> 
 
    <item 
 
     android:bottom="3dp" 
 
     android:left="3dp" 
 
     android:right="3dp" 
 
     android:top="3dp"> 
 
     <shape android:shape="oval"> 
 
      <size 
 
       android:width="10dp" 
 
       android:height="10dp" /> 
 
      <solid android:color="@color/colorLightGray" /> 
 
     </shape> 
 
    </item> 
 
</layer-list>

+0

Parfait, merci. Maintenant, je peux utiliser wrap_content dans ma mise en page et définir la taille réelle dans le drawable :) – xxtesaxx

0

Utilisez ceci:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape 
      android:shape="oval"> 
      <solid 
       android:color="@android:color/transparent"/> 
      <padding 
       android:bottom="4dp" 
       android:left="4dp" 
       android:right="4dp" 
       android:top="4dp"/> 
      <stroke 
       android:width="1dp" 
       android:color="@color/colorLightGray"/> 
     </shape> 
    </item> 
    <item> 
     <shape 
      android:shape="oval"> 
      <solid 
       android:color="@color/colorLightGray"/> 
      <size 
       android:width="10dp" 
       android:height="10dp"/> 
     </shape> 

    </item> 
</layer-list> 
+0

Merci, mais je suis allé avec la solution KodyTsang. Pouvez-vous expliquer pourquoi vous utilisez un solide transparent? J'ai toujours pensé que le dessin de trucs transparents sur mobile devrait être évité autant que possible pour économiser de la puissance de traitement. – xxtesaxx

+0

@xxtesaxx En fait bague extérieure également cercle plein. Pour le montrer comme un anneau j'ai utilisé la couleur transparente pour le remplissage 4dp et ai donné le coup avec 1dp. Donc pour 10dp les deux sont des cercles gris après que les couleurs supérieures changent en transparent (4dp) puis en coup de. J'espère que ça aide. – Spartan