¿Cómo puedo crear un borde alrededor de un LinearLayout de Android?

Respuestas:

241

Por supuesto. Puede agregar un borde a cualquier diseño que desee. Básicamente, necesita crear un elemento de diseño personalizado y agregarlo como fondo a su diseño. ejemplo:

Cree un archivo llamado customborder.xmlen su carpeta dibujable:

<?xml version="1.0" encoding="UTF-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
   <corners android:radius="20dp"/> 
   <padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp"/>
   <stroke android:width="1dp" android:color="#CCCCCC"/>
 </shape>

Ahora aplíquelo como fondo a su diseño más pequeño:

<LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/customborder">

Eso debería hacer el truco.

Ver también:

Anup Cowkur
fuente
29
<sólido> rellenará el color en el rectángulo. Necesitas usar <stroke> en su lugar para dibujar solo el borde.
NightFury
1
El truco aquí es en realidad el <padding>, me tomó un tiempo descubrir por qué mi forma no funcionaba. Con relleno funciona bien.
John
3
¿Ambos <solid/>y <stroke/>llenar todo el rectángulo? ¿Es esto un error en mi código?
2014
13
Agregue <stroke android: width = "1dip" android: color = "# Wavebreak" />, funciona bien.
Pierry
1
El comentario de Pierry hace que esta respuesta sea correcta. De lo contrario, solo puede obtener un fondo completo.
kagkar
25

Creat XML llamado border.xml en la carpeta dibujable como se muestra a continuación:

<?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="#FF0000" /> 
    </shape>
  </item>   
    <item android:left="5dp" android:right="5dp"  android:top="5dp" >  
     <shape android:shape="rectangle"> 
      <solid android:color="#000000" />
    </shape>
   </item>    
 </layer-list>

luego agregue esto al diseño lineal como fondo como este:

     android:background="@drawable/border"
KDeogharkar
fuente
11

Prueba esto:

Por ejemplo, definamos res / drawable / my_custom_background.xml como:

(cree este diseño en su carpeta dibujable) layout_border.xml

  <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <stroke android:width="2dp" android:height="2dp"
                android:color="#FF0000" />
            <solid android:color="#000000" />
            <padding android:left="1dp" android:top="1dp" android:right="1dp"
                android:bottom="1dp" />

            <corners android:radius="1dp" android:bottomRightRadius="5dp"
                android:bottomLeftRadius="0dp" android:topLeftRadius="5dp"
                android:topRightRadius="0dp" />
        </shape>
    </item>

</layer-list>

main.xml

<LinearLayout 
    android:layout_gravity="center"
    android:layout_width="200dp" 
    android:layout_height="200dp"   
    android:background="@drawable/layout_border" />
</LinearLayout>
Android_coder
fuente
11

Cree un archivo xml en una carpeta dibujable

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

<padding
    android:bottom="5dp"
    android:left="5dp"
    android:right="5dp"
    android:top="5dp" />

<corners android:radius="4dp" />

Ahora llame a este xml a su fondo de diseño pequeño

android: background = "@ drawable / yourxml"

Vani
fuente
Aquí no se permite el trazo de elemento.
hdavidzhu
3

Esta solución solo agregará el borde, el cuerpo del LinearLayout será transparente.

Primero, cree este borde dibujable en la carpeta dibujable, border.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android= "http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke android:width="2dp" android:color="#ec0606"/>
    <corners android:radius="10dp"/>
</shape>

Luego, en su Vista LinearLayout, agregue el border.xml como fondo como este

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/border">
guardagujas
fuente
3

también puedes hacerlo pragmáticamente

  GradientDrawable gradientDrawable=new GradientDrawable();
   gradientDrawable.setStroke(4,getResources().getColor(R.color.line_Input));

Luego configure el fondo del diseño como:

LinearLayout layout = (LinearLayout ) findViewById(R.id.ayout); layout .setBackground(gradientDrawable);
Vikram singh
fuente
3

Agregaré el enlace de documentos de Android a otras respuestas.

https://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

Describe todos los atributos de Shape Drawable y strokeentre ellos para establecer el borde.

Ejemplo:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <stroke android:width="1dp" android:color="#F00"/>
  <solid android:color="#0000"/>
</shape>

Borde rojo con fondo transparente.

mortalis
fuente
La parte sólida permite configurar el tinte solo en el borde. +1
aksh1618
0

¿No quieres crear un recurso dibujable?

  <FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/black"
    android:minHeight="128dp">

    <FrameLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_margin="1dp"
      android:background="@android:color/white">

      <TextView ... />
    </FrameLayout>
  </FrameLayout>
Jeffrey Blattman
fuente
0

Prueba esto en tu resolución / dibujable

    <?xml version="1.0" encoding="UTF-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
  <shape
    android:shape="rectangle">
    <padding android:left="15dp"
        android:right="15dp"
        android:top="15dp"
        android:bottom="15dp"/>
    <stroke android:width="10dp"
        android:color="@color/colorPrimary"/>
  </shape>
</item><item android:left="-5dp"
        android:right="-5dp"
        android:top="-5dp"
        android:bottom="-5dp">
  <shape android:shape="rectangle">
    <solid android:color="@color/background" />
  </shape></item></layer-list>
Akash Tongare
fuente