2011-03-10 11 views
27

Así que quería tener un TextView con un borde fresco alrededor. No pude encontrar ninguna manera estándar de hacer, así que se le ocurrió esto:¿Existe alguna manera más simple/mejor de poner un borde/contorno alrededor de mi TextView?

@ estirable/custom_bg_1: Una forma redondeada azul

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

@ estirable/custom_bg_2: Una forma redondeada blanca

<?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: el xml para la actividad

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

el resultado:

picture of blue border

Lo que estoy haciendo aquí una superposición de un fondo en forma de blanco dentro de una forma de fondo azul para dar el efecto de un borde azul. No me puedo imaginar que esta es la mejor manera de obtener este efecto. He visto otras publicaciones que intentan resolver este problema, como this y this, pero creo que son tan útiles como mi implementación.

¿Hay alguna manera mejor o más estándar de simplemente poner un borde alrededor de ciertas vistas como un TextView o debería seguir con la forma en que lo estoy haciendo?


EDITAR

me cambió custom_bg_2.xml a tener este aspecto:

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

Y ahora me sale este resultado:

blue and black border

Parece Puedo lograr un esquema por incluir ing <stroke ... /> en forma.

Respuesta

39

Es probable que pueda llegar a funcionar con sólo custom_bg_2 si se agrega a> sección < accidente cerebrovascular:

<?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> 
+2

¡Oh, qué bien!Eso parece ser exactamente lo que estaba buscando. Se debe tener en cuenta que cuando solo se ponen y no , la carrera rellena la forma, pero cuando se utilizan ambos, se obtiene el resultado deseado. – jbranchaud

3

¿Por qué no prueba golpe en lugar de sólido?

Según Shape Drawable se puede hacer algo como:

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

en lugar de <solid/> y luego configurarlo como TextView fondo.

+0

traté de intercambio fragmento de código para el código , sin embargo, parece tener la exactamente el mismo efecto. ¿Es esto lo que se supone que debe hacer una apoplejía? – jbranchaud

+0

sí, simplemente crea un borde. Puede usar simplemente el fondo simple que tiene el trazo y dejar el otro fuera –

+0

No quiero usar '' en lugar de '', sino que además de eso. Luego, el color del trazo describe la vista mientras el color del sólido lo llena. – jbranchaud

Cuestiones relacionadas