studio programacion para móviles libros gratis español edición desarrollo desarrollar curso aprende aplicaciones android border android-relativelayout

para - manual programacion android español pdf



¿Cómo poner un borde alrededor de una distribución relativa de Android? (4)

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


  1. en su carpeta res/drawable , cree 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. establece el fondo de tu widget a la configuración dibujable que acabas de crear

p.ej. Si desea poner su borde en una configuración relativa:

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


Aunque todas las respuestas proporcionadas funcionan, son muy rígidas. Si desea personalizar el color del borde, 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 un color y un borde para el borde inferior.

1) Cree una clase que amplíe RelativeLayout y anule en 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 las propiedades de estilo en attrs.xml

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

3) Ya terminaste 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>


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 el RelativeLayout. poof frontera instantánea.


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);