我已经看到这个 关于在 android textview 周围放置边框的主题,我使用了它。但是现在,我想在位于相对布局中的小部件周围放置一个边框。我该怎么做?
问问题
36428 次
4 回答
59
- 在您的
res/drawable
文件夹中,创建一个新文件background_border.xml
在此文件中,您将像这样定义小部件的背景:
<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>
- 将小部件的背景设置为您刚刚创建的可绘制配置
例如。如果您想将边框放在相对布局上:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_border"
android:padding="15dp">
...
</RelativeLayout>
于 2015-10-19T10:45:04.473 回答
12
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);
于 2013-07-12T07:21:48.640 回答
1
创建一个 FrameLayout 来获取边框的背景颜色,以及边框宽度的边距或填充,并将该 FrameLayout 放置在 RelativeLayout 中。将 TextView 放在 FrameLayout 中,而不是直接放在 RelativeLayout 中。噗瞬间边框。
于 2012-05-03T11:32:35.380 回答
1
尽管所有提供的答案都有效,但它们非常死板。如果您想为不同的屏幕自定义边框颜色、边框厚度怎么办。为此,您应该尝试我的解决方案。我们将按照三个步骤创建自定义 RelativeLayout,允许您为底部边框提供边框颜色和厚度。
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) 在 attrs.xml 中定义可样式化的属性
<declare-styleable name="BorderRelativeLayout">
<attr name="borderThickness" format="dimension"/>
<attr name="borderColor" format="color"/>
</declare-styleable>
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>
于 2017-08-30T11:44:40.630 回答