Je dois créer une forme Android afin que seul le bas ait un trait (une ligne pointillée). Lorsque j'essaie ce qui suit, le trait divise la forme en deux par le centre. Est-ce que quelqu'un sait comment bien faire les choses? le trait doit être la ligne de fond/bordure. J'utilise la forme en tant qu'arrière-plan d'un TextView. S'il vous plaît, peu importe pourquoi j'en ai besoin.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#1bd4f6" />
</shape>
</item>
<item>
<shape Android:shape="line" >
<padding Android:bottom="1dp" />
<stroke
Android:dashGap="10px"
Android:dashWidth="10px"
Android:width="1dp"
Android:color="#ababb2" />
</shape>
</item>
</layer-list>
C'est un peu un bidouillage, mais je pense que c'est probablement la meilleure façon de le faire. La ligne en pointillé sera toujours en bas, quelle que soit la hauteur.
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#1bd4f6" />
</shape>
</item>
<item Android:top="-2dp" Android:right="-2dp" Android:left="-2dp">
<shape>
<solid Android:color="@Android:color/transparent" />
<stroke
Android:dashGap="10px"
Android:dashWidth="10px"
Android:width="1dp"
Android:color="#ababb2" />
</shape>
</item>
</layer-list>
La seconde forme est un rectangle transparent avec un contour en pointillé. La clé pour que la bordure n'apparaisse qu'en bas réside dans les marges négatives définies des autres côtés. Ces marges négatives "poussent" la ligne pointillée en dehors de la zone dessinée de ces côtés, ne laissant que la ligne le long du bas. Un effet secondaire potentiel (que je n'ai pas encore essayé) est que, pour les vues dépassant leurs propres limites, les bordures de la marge négative peuvent devenir visibles.
Cela fait l'affaire ...
<item >
<shape Android:shape="rectangle">
<solid Android:color="#YOUR_BOTTOM_LINE_COLOR"/>
</shape>
</item>
<item Android:bottom="1.5dp">
<shape Android:shape="rectangle">
<solid Android:color="#YOUR_BG_COLOR"/>
</shape>
</item>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:top="-6dp"
Android:left="-6dp"
Android:right="-6dp"
Android:bottom="0dp">
<shape Android:shape="rectangle">
<solid Android:color="#88FFFF00"/>
<stroke
Android:width="5dp"
Android:color="#FF000000"/>
</shape>
</item>
</layer-list>
Cette réponse s’adresse aux chercheurs Google qui souhaitent afficher la bordure inférieure en pointillé de EditText
comme ici.
Créez dotted.xml
dans le dossier drawable
et collez-les
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:bottom="1dp"
Android:left="-2dp"
Android:right="-2dp"
Android:top="-2dp">
<shape Android:shape="rectangle">
<stroke
Android:width="0.5dp"
Android:color="@Android:color/black" />
<solid Android:color="#ffffff" />
<stroke
Android:width="1dp"
Android:color="#030310"
Android:dashGap="5dp"
Android:dashWidth="5dp" />
<padding
Android:bottom="5dp"
Android:left="5dp"
Android:right="5dp"
Android:top="5dp" />
</shape>
</item>
</layer-list>
Définissez ensuite l'attribut Android:background
sur dotted.xml
que nous venons de créer. Votre EditText
ressemble à ceci.
<EditText
Android:id="@+id/editText"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Some Text"
Android:background="@drawable/dotted" />
Je pense que c'est simple, sans tous ces rembourrages négatifs ou cigognes.
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@color/main_bg_color"/>
<item Android:gravity="bottom">
<shape Android:shape="rectangle">
<size Android:height="5dp"/>
<solid Android:color="@color/bottom_bar_color"/>
</shape>
</item>
</layer-list>
Je pense que vous n'avez pas besoin d'utiliser la forme si je vous ai compris.
Si vous regardez comme indiqué dans l'image suivante, utilisez la disposition suivante.
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:background="#1bd4f6"
Android:paddingBottom="4dp" >
<TextView
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:background="#ababb2"
Android:padding="5dp"
Android:text="Hello Android" />
</RelativeLayout>
</RelativeLayout>
MODIFIER
jouez avec ces propriétés vous obtiendrez des résultats
Android:top="dimension"
Android:right="dimension"
Android:bottom="dimension"
Android:left="dimension"
essayez comme ça
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#1bd4f6" />
</shape>
</item>
<item Android:top="20px"
Android:left="0px">
<shape Android:shape="line" >
<padding Android:bottom="1dp" />
<stroke
Android:dashGap="10px"
Android:dashWidth="10px"
Android:width="1dp"
Android:color="#ababb2" />
</shape>
</item>
</layer-list>
Essayez le code XML suivant:
<layer-list>
<item Android:top="-2dp" Android:right="-2dp" Android:left="-2dp">
<shape>
<solid Android:color="@Android:color/transparent" />
<stroke
Android:width="1dp"
Android:color="#fff" />
</shape>
</item>
</layer-list>
Une solution simple:
Créez un fichier pouvant être dessiné sous le nom edittext_stroke.xml dans un dossier pouvant être dessiné . Ajoutez le code ci-dessous:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="line"
>
<stroke
Android:width="1dp"
Android:color="@Android:color/white" >
</stroke>
</shape>
Dans le fichier de mise en page, ajoutez le dessin à edittext en tant que
Android: drawableBottom = "@ drawable/edittext_stroke"
<EditText
Android:textColor="@Android:color/white"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:drawableBottom="@drawable/edittext_stroke"
/>
Habituellement, pour des tâches similaires - j'ai créé une liste de couches pouvant être dessinée comme celle-ci:
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle">
<solid Android:color="@color/underlineColor"/>
</shape>
</item>
<item Android:bottom="3dp">
<shape Android:shape="rectangle">
<solid Android:color="@color/buttonColor"/>
</shape>
</item>
L'idée est que vous dessinez d'abord le rectangle avec underlineColor, puis au-dessus de celui-ci, vous dessinez un autre rectangle avec le bouton actuel Color mais en appliquant bottomPadding. Ça marche toujours.
Mais lorsque j'avais besoin que ButtonColor soit transparent, je ne pouvais utiliser le dessin ci-dessus. J'ai trouvé une solution de plus
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle">
<solid Android:color="@Android:color/transparent"/>
</shape>
</item>
<item Android:drawable="@drawable/white_box" Android:gravity="bottom" Android:height="2dp"/>
</layer-list>
(comme vous pouvez le voir ici, mainButtonColor est transparent et white_box n'est qu'un simple rectangle que l'on peut dessiner avec un solide blanc)
c'est Edittext complètement transparent avec le fond transparent.
<item>
<shape Android:shape="rectangle" >
<solid Android:color="@color/transparent" />
</shape>
</item>
<item Android:top="-3dp" Android:right="-3dp" Android:left="-3dp">
<shape>
<solid Android:color="@Android:color/transparent" />
<stroke
Android:width="2dp"
Android:color="@color/bottomline" />
</shape>
</item>
Cela a fonctionné mieux pour moi:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:top="-5dp" Android:left="-5dp" Android:right="-5dp" Android:bottom="0dp">
<shape Android:shape="rectangle">
<stroke Android:width="4dp" Android:color="#ff0000"/>
</shape>
</item>
</layer-list>
Affiche la ligne en bas seulement. Vous pouvez facilement changer la largeur de trait pour obtenir la taille de votre choix et mettre à jour les haut, gauche, droit, en conséquence.
utiliser ce xml changer la couleur avec votre choix.
<item>
<layer-list>
<item>
<shape>
<solid Android:color="@color/gray_500" />
</shape>
</item>
<!-- CONTENT LAYER -->
<item Android:bottom="2dp" >
<shape>
<solid Android:color="#ffffff" />
</shape>
</item>
</layer-list>
</item>
Dans le cas où vous voulez par programme
public static Drawable getStorkLineDrawable(@ColorInt int colorStrok, int iSize, int left, int top, int right, int bottom)
{
GradientDrawable gradientDrawable = new GradientDrawable();
gradientDrawable.setShape(GradientDrawable.RECTANGLE);
gradientDrawable.setStroke(iSize, colorStrok);
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{gradientDrawable});
layerDrawable.setLayerInset(0, left, top, right, bottom);
return layerDrawable;
}
appeler cette méthode comme
Drawable yourLineDrawable= getStorkLineDrawable(yourColor, iSize, -iSize, -iSize, -iSize, 0);