Question comment mettre une bordure autour d'un androïde relativelayout?


J'ai vu ça assujettir à propos de mettre une bordure autour d'une vue textuelle Android, et je l'ai utilisé. Mais maintenant, je voudrais mettre une bordure autour des widgets situés dans une disposition relative. Comment puis-je le faire?


14
2018-05-03 11:26


origine


Réponses:


  1. dans ton res/drawable dossier, créer un nouveau fichier background_border.xml

Dans ce fichier, vous définirez l'arrière-plan du widget comme ceci:

<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. définir l'arrière-plan de votre widget sur la configuration que vous venez de créer

par exemple. si vous voulez mettre votre frontière sur un rapport relativelayout:

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

39
2017-10-19 10:45



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

10
2017-07-12 07:21



Créez un FrameLayout qui obtient la couleur d'arrière-plan de votre bordure et une marge ou un remplissage de la largeur de votre bordure et placez ce FrameLayout dans votre RelativeLayout. Placez le TextView dans votre FrameLayout au lieu de directement dans le RelativeLayout. pouf frontière instantanée.


1
2018-05-03 11:32



Bien que toutes les réponses fournies fonctionnent, elles sont très rigides. Si vous souhaitez personnaliser la couleur des bordures, leur épaisseur pour différents écrans. pour cela, vous devriez essayer ma solution. Nous allons suivre trois étapes pour créer un RelativeLayout personnalisé vous permettant de fournir borderColor et Thickness pour la bordure inférieure.

1) Créez une classe qui étend RelativeLayout et remplacez la méthode 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) Définir les propriétés stylables dans attrs.xml

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

3) vous avez terminé et vous pouvez l'utiliser comme

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

-1
2017-08-30 11:44