2012-05-13 18 views

Respuesta

23

Por lo que yo lo entiendo, no hay una manera fácil de hacerlo. pero si usa layer-list con un elemento que tiene el borde y luego uno que no con un desplazamiento desde en todos los lados para los que desea un borde igual al ancho del borde, lo lograría.

Quiero dejar el xml para que en representación de la parte inferior sin fronteras ..

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <!-- Border --> 
    <item> 
     <shape> 
      <solid android:color="#f000"></solid> 
     </shape> 
    </item> 
    <!-- Body --> 
    <item android:left="2dip" 
      android:top="2dp" 
      android:right="2dp"> 
     <shape> 
      <solid android:color="#ffafafaf"></solid> 
     </shape> 
    </item> 
</layer-list> 

Como se puede ver, yo estoy diciendo la segunda elemento que se va inserción de la primera de ellas por dos de dp en todos los lados, excepto parte inferior (por lo tanto el resultado no-frontera en la parte inferior), ahí lo tienes:

enter image description here

Así que, esencialmente esto no es una frontera per se, es la forma de abajo (aunque se podría añadir un borde si necesita punteado o punteado o lo que sea) cubierto por un segundo elemento con sería el cuerpo del botón. Todos en el mismo dibujable :)

Esto se puede aplicar a cualquier borde que desea eliminar, cambiando los valores que el artículo es inserción, por ejemplo, si cambio el right en el elemento de cuerpo a bottom, los desaparecidos frontera sería el más adecuado ya que es la una sin la inserción

+0

Bueno, ¿dónde Tengo que colocar mis estilos? En el primer , ¿verdad? –

+0

Por cierto, estoy tratando de usarlo para EditText. –

+0

No importa a qué vista lo aplique. El primer 'elemento' es solo para el borde, por lo que debe dividir el estilo entre esos dos. Si quieres un fondo verde, por ejemplo, lo agregarías al segundo ítem, el que se llama "cuerpo" en mi código –

10

Esto es un poco de un truco, pero su posible eliminar una o más fronteras utilizando un dibujable inset con valores negativos. Envuelva la forma en inset y aplique un negativo android:insetTop, android:insetBottom, android:insetLeft, o android:insetRight con un valor absoluto igual al ancho del trazo.

enter image description here

Por ejemplo, para eliminar el borde inferior de un rectángulo con un accidente cerebrovascular 4dp, utilizar un valor android:insetBottom de -4dp.

<?xml version="1.0" encoding="utf-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:insetBottom="-4dp"> 

    <shape android:shape="rectangle"> 
     <solid android:color="#FFFFFF" /> 
     <stroke android:width="4dp" android:color="#000000" /> 
     <corners android:radius="4dp" /> 
    </shape> 

</inset> 

Esto parece funcionar bien siempre que las esquinas de la forma tienen un radio que es menor que igual a la anchura del trazo. De lo contrario, utilice el mayor de los dos valores (el radio) al aplicar el recuadro para ocultar por completo las partes redondeadas de los bordes adyacentes.

+0

genial, gracias, fue muy útil –

0

Es un truco xml. Primero debe llenar la capa con un color específico (Color de línea). Luego debe llenarlo con otro color (Color de fondo) mientras empuja el dibujo un poco desde el lado que desea dibujar la línea. Aquí está mi código:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

     <!-- First we have to create the line color (Black: #000000 and 
      Set position to 0 from all sides, this will allow us 
      even to to determine border size in any side (top, 
      right, bottom, left) --> 

    <item android:top="0dp" 
     android:right="0dp" 
     android:left="0dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#000000"></solid> 
     </shape> 
    </item> 

    <!-- Here we fill the content with our color, and I will 
     push 1dp from the top so this size (top = 1dp) will 
     keep the previous color and it will look like the border 
     --> 

    <item android:top="1dp" 
     android:right="0dp" 
     android:left="0dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#f4f4f4"></solid> 
     </shape> 
    </item> 
</layer-list> 

https://i.stack.imgur.com/ifak8.jpg

Aquí como se ve:

enter image description here

Cuestiones relacionadas