web-dev-qa-db-fra.com

Existe-t-il un moyen plus simple / meilleur de mettre une bordure / un contour autour de mon TextView?

Je voulais donc avoir un TextView avec une bordure cool autour. Je ne pouvais pas trouver de moyen standard de le faire, alors j'ai trouvé ceci:

@ drawable/custom_bg_1: Une forme arrondie bleue

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="#439CC8"/>
    <corners Android:radius="3dp" />
    <padding Android:left="10dp" Android:top="10dp"
        Android:right="10dp" Android:bottom="10dp" />
</shape>

@ drawable/custom_bg_2: Une forme arrondie blanche

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="#FFFFFF"/>
    <corners Android:radius="3dp" />
    <padding Android:left="10dp" Android:top="10dp"
        Android:right="10dp" Android:bottom="10dp" />
</shape>

myactivity.xml: le xml de l'activité

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:layout_width="fill_parent"
  Android:layout_height="fill_parent"
  Android:orientation="vertical"
  Android:padding="15dp" >

  <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical"
    Android:padding="2dp"
    Android:background="@drawable/custom_bg_1" >

      <TextView Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
        Android:text="@string/curr_loc"
        Android:textSize="15sp"
        Android:background="@drawable/custom_bg_2" />

  </LinearLayout>
</Linearlayout>

Le résultat:

picture of blue border

Ce que je fais ici, c'est superposer un arrière-plan de forme blanche à l'intérieur d'un arrière-plan de forme bleue pour donner l'effet d'une bordure bleue. Je ne peux pas imaginer que c'est la meilleure façon d'obtenir cet effet. J'ai vu d'autres articles qui tentent de résoudre ce problème tels que this et this , mais j'ai l'impression qu'ils sont tout aussi efficaces que mon implémentation.

Existe-t-il un meilleur moyen ou un moyen plus standard de simplement mettre une bordure autour de certaines vues telles qu'une TextView ou dois-je simplement m'en tenir à la façon dont je le fais?


ÉDITER

J'ai changé custom_bg_2.xml pour ressembler à ceci:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="#FFFFFF"/>
    <stroke Android:width="2dp" Android:color="#000000"/>
    <corners Android:radius="3dp" />
    <padding Android:left="10dp" Android:top="10dp"
        Android:right="10dp" Android:bottom="10dp" />
</shape>

Et maintenant j'obtiens ce résultat:

blue and black border

Il semble que je puisse obtenir un aperçu en incluant <stroke ... /> en forme.

27
jbranchaud

Vous pouvez probablement vous en tirer avec simplement custom_bg_2 si vous ajoutez une section <stroke>:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="#FFFFFF"/>
    <corners Android:radius="3dp" />
    <padding Android:left="10dp" Android:top="10dp"
        Android:right="10dp" Android:bottom="10dp" />
    <stroke Android:color="#439CC8" Android:width="2dp" />
</shape>
38
Ted Hopp

Pourquoi ne pas essayer coup au lieu de solide ?

Selon Shape Drawable vous pouvez faire quelque chose comme:

<stroke Android:width="2dp" Android:color="#439CC8"/>

au lieu de <solid/>, puis définissez-le comme arrière-plan TextView.

3
Matthew Willis