¿Cómo poner un borde alrededor de un diseño relativo de Android?

He visto esto sujeto sobre poner un borde alrededor de una vista de texto de Android, y lo usé. Pero ahora, me gustaría colocar un borde alrededor de los widgets que están situados en un diseño relativo. ¿Cómo puedo hacerlo?

preguntado el 03 de mayo de 12 a las 12:05

4 Respuestas

  1. en tu res/drawable carpeta, crea un nuevo archivo background_border.xml

En este archivo, definirá el fondo para el widget como este:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle" >
    <!-- This is the stroke you want to define -->
    <stroke android:width="1dp" 
            android:color="@color/color_stroke"/>

    <!-- Optional, round your corners -->
    <corners android:bottomLeftRadius="0dp"
             android:topLeftRadius="5dp"
             android:bottomRightRadius="5dp"
             android:topRightRadius="0dp" />

    <!-- Optional, fill the rest of your background with a color or gradient, use transparent if you only want the border to be displayed-->
    <gradient android:startColor="@android:color/transparent"
              android:endColor="@android:color/transparent"
              android:angle="90"/>
</shape>
  1. establezca el fondo de su widget en la configuración dibujable que acaba de crear

p.ej. si desea poner su borde en un diseño relativo:

<RelativeLayout            
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/background_border"
            android:padding="15dp">
    ...
</RelativeLayout>

Respondido 19 Oct 15, 14:10

@color/color_stroke no definido - usuario10180461

@color/color_name apunta a un color que defina en el archivo de recursos res/values/colors.xml desarrollador.android.com/guide/topics/resources/… @Dexter- RWIL

RelativeLayout layout = (RelativeLayout) view.findViewById(R.id.borderEffect); // id fetch from xml
ShapeDrawable rectShapeDrawable = new ShapeDrawable(); // pre defined class

// get paint
Paint paint = rectShapeDrawable.getPaint();

// set border color, stroke and stroke width
paint.setColor(Color.GRAY);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(5); // you can change the value of 5
layout.setBackgroundDrawable(rectShapeDrawable);

respondido 04 nov., 13:10

Cree un FrameLayout que obtenga el color de fondo de su borde y un margen o relleno del ancho de su borde, y coloque ese FrameLayout en su RelativeLayout. Coloque TextView en su FrameLayout en lugar de directamente en RelativeLayout. maricón frontera instantánea.

contestado el 03 de mayo de 12 a las 12:05

Aunque todas las respuestas proporcionadas funcionan, son muy rígidas. ¿Qué sucede si desea personalizar el color del borde y el grosor del borde para diferentes pantallas? para eso, debe probar mi solución. Vamos a seguir tres pasos para crear un RelativeLayout personalizado que le permita proporcionar borderColor y Thickness para el borde inferior.

1) Cree una clase que amplíe RelativeLayout y anule el método Draw

public class BorderRelativeLayout extends RelativeLayout {

  private float borderThickness;
  private int borderColor;

  public BorderRelativeLayout(Context context) {
    this(context, null, 0);
  }

  public BorderRelativeLayout(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public BorderRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context, attrs);
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    Rect rect = new Rect();
    Paint paint = new Paint();
    paint.setColor(borderColor);
    paint.setStrokeWidth(borderThickness);
    getLocalVisibleRect(rect);
    canvas.drawLine(rect.left, rect.bottom, rect.right, rect.bottom, paint);
  }

  private void init(Context context, AttributeSet attrs) {
    setWillNotDraw(false);

    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.BorderRelativeLayout);

    borderThickness = array.getDimension(R.styleable.BorderRelativeLayout_borderThickness, 0.5f);
    borderColor = array.getColor(R.styleable.BorderRelativeLayout_borderColor,
        ContextCompat.getColor(context, R.color.colorPrimary));
  }
}

2) Definir propiedades de estilo en attrs.xml

<declare-styleable name="BorderRelativeLayout">
    <attr name="borderThickness" format="dimension"/>
    <attr name="borderColor" format="color"/>
  </declare-styleable>

3) has terminado y puedes usarlo como

<com.spacewek.spacewek.controls.BorderRelativeLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:id="@+id/headLayout"
      app:borderThickness="2dp"
      app:borderColor="@color/divider_new_color">

 </com.spacewek.spacewek.controls.BorderRelativeLayout>

Respondido 30 ago 17, 12:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.