如何在android相对布局周围放置边框?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10430392/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to put a border around an android relativelayout?
提问by AyaAndro
回答by RWIL
- in your
res/drawable
folder, create a new filebackground_border.xml
- 在您的
res/drawable
文件夹中,创建一个新文件background_border.xml
In this file, you will define the background for widget like this:
在此文件中,您将像这样定义小部件的背景:
<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>
- set the background of your widget to the drawable configuration you've just created
- 将小部件的背景设置为您刚刚创建的可绘制配置
eg. if you want to put your border on a relativelayout:
例如。如果你想把你的边框放在一个相对布局上:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_border"
android:padding="15dp">
...
</RelativeLayout>
回答by GAURAV KUMAR GUPTA
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);
回答by mah
Create a FrameLayout that gets the background color of your border, and a margin or padding of your border width, and place that FrameLayout in your RelativeLayout. Place the TextView in your FrameLayout instead of directly in the RelativeLayout. poofinstant border.
创建一个 FrameLayout 来获取边框的背景颜色,以及边框宽度的边距或内边距,然后将该 FrameLayout 放在您的 RelativeLayout 中。将 TextView 放在 FrameLayout 中,而不是直接放在 RelativeLayout 中。噗瞬间边框。
回答by suulisin
Though all the provided answers work,they are very rigid.what if you want to customise border color,borderthickness for different screens. for that you should try my solution.We are going to follow three steps in creating a custom RelativeLayout that allow you to provide borderColor and Thickness for bottom border.
尽管所有提供的答案都有效,但它们非常僵化。如果您想为不同的屏幕自定义边框颜色、边框厚度怎么办。为此,您应该尝试我的解决方案。我们将按照三个步骤创建一个自定义的 RelativeLayout,允许您为底部边框提供 borderColor 和 Thickness。
1)Create a class that extends RelativeLayout and override on Draw method
1)创建一个扩展RelativeLayout并覆盖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)Define stylable properties in attrs.xml
2) 在 attrs.xml 中定义样式属性
<declare-styleable name="BorderRelativeLayout">
<attr name="borderThickness" format="dimension"/>
<attr name="borderColor" format="color"/>
</declare-styleable>
3) you are done and you can use it like
3)你已经完成了,你可以像这样使用它
<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>