web-dev-qa-db-fra.com

forme androïde avec trait de fond

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>
98
Cote Mounyo

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>

Explication:

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.

280
Krylez

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>
44
Jongz Puangput
<?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>
36
Anonan

Cette réponse s’adresse aux chercheurs Google qui souhaitent afficher la bordure inférieure en pointillé de EditText comme ici.

 sample

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" />
14
Shree Krishna

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>
9
Simon K. Gerges

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.

enter image description here

<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>
7
Ketan Ahir

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>
6

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"
      />
5
adhi

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)

4
Lanitka

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>

0
Samet öztoprak

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.

0
Sileria

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);
0
sourav pandit